does: compute the tree-to-list transformation for a tree with two
leaves, performing all beta reduction by hand using the
definitions for bind\_continuation, unit\_continuation and so on.
- If you take this route, study the description of streams (a
+ If you take this route, study the description of **streams** (a
particular kind of data structure) below. The goal will be to
arrange for the continuation-flavored tree_monadizer to transform
a tree into a stream instead of into a list. Once you've done
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 *)
+- : 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