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 ()