(* Force the thunk to compute the second element *)
# tail ();;
-- : int stream = Next (2, [fun]) (* Second element: 2 *)
+- : 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