type nat = Zero | S of nat;; let rec take_l n xs = match Lazy.force xs with | [] -> [] | x::xs' -> match n with | Zero -> [] | S(n') -> x::take_l n' xs' ;; let rec zeros = lazy Zero:: zeros ;; let main n zeros = take_l n zeros;;