datatype olist (int) =
  | nil (100) of ()
  | {x,y:nat | x <= y} cons (x) of (int x, olist (y))

fun print_olist {a:nat} (xs: olist a): void = 
  case+ xs of
  | nil () => print_newline()
  | cons(x, xs) => begin printf("%d ", @(x)); print_olist(xs) end

implement main() = let
  val a = cons(1, cons(2, cons(10, cons(12, nil))))

  val () = print_olist(a) 
in
  ()
end