(* implementation *) open Printf type 'a cont = 'a * (unit -> 'a cont) let evens n = let rec loop k () = if k == n then None else Some (k , loop (k + 2)) in loop 2 let test () = let rec loop next = match next () with | None -> () | Some (res, next') -> printf "%i\n" res; loop next' in loop (evens 10) let _ = test () (* interface *) type 'a cont val evens : int -> int cont option