val int_stream : int stream = Next (1, [fun]) (* First element: 1 *)
# let tail = match int_stream with Next (i, rest) -> rest;;
-val tail : unit -> int stream = <fun> (* Tail: a thunk *)
+val tail : unit -> int stream = <fun> (* Tail: a thunk *)
(* Force the thunk to compute the second element *)
# tail ();;
- : int stream = Next (2, [fun]) (* Second element: 2 *)
# match tail () with Next (_, rest) -> rest ();;
-- : int stream = Next (3, <fun>) (* Third element: 3 *)
+- : int stream = Next (3, <fun>) (* Third element: 3 *)
</pre>
You can think of `int_stream` as a functional object that provides