let rec filter f s = let rec first s = let h, t = next s in if f h then h, filter f t else first t in freeze (fun () -> first s);; let entiers = let rec s n = freeze (fun () -> n, s (n + 1)) in s 0;; let entiers_pairs = filter (fun x -> x mod 2 = 0) entiers;; nth entiers 3;; nth entiers_pairs 3;;