-let rec treemonadizer (f:'a -> ('b, 'r) continuation) (t:'a tree):(('b tree), 'r) continuation =
- match t with Leaf x -> continuation_bind (f x) (fun x' -> continuation_unit (Leaf x'))
- | Node (l, r) -> continuation_bind (treemonadizer f l) (fun x ->
- continuation_bind (treemonadizer f r) (fun y ->
- continuation_unit (Node (x, y))));;
-</pre>
+Now for the main point. What if we wanted to convert a tree to a list
+of leaves?
+
+ type ('a, 'r) continuation = ('a -> 'r) -> 'r;;
+ let continuation_unit a = fun k -> k a;;
+ let continuation_bind u f = fun k -> u (fun a -> f a k);;
+
+ let rec treemonadizer (f : 'a -> ('b, 'r) continuation) (t : 'a tree) : ('b tree, 'r) continuation =
+ match t with
+ | Leaf i -> continuation_bind (f i) (fun i' -> continuation_unit (Leaf i'))
+ | Node (l, r) -> continuation_bind (treemonadizer f l) (fun x ->
+ continuation_bind (treemonadizer f r) (fun y ->
+ continuation_unit (Node (x, y))));;