interesting functions for the first argument of `treemonadizer`:
(* Simulating the tree reader: distributing a operation over the leaves *)
- # treemonadizer (fun a c -> c (square a)) t1 (fun i -> i);;
+ # treemonadizer (fun a k -> k (square a)) t1 (fun i -> i);;
- : int tree =
Node (Node (Leaf 4, Leaf 9), Node (Leaf 25, Node (Leaf 49, Leaf 121)))
(* Simulating the int list tree list *)
- # treemonadizer (fun a c -> c [a; square a]) t1 (fun i -> i);;
+ # treemonadizer (fun a k -> k [a; square a]) t1 (fun i -> i);;
- : int list tree =
Node
(Node (Leaf [2; 4], Leaf [3; 9]),
Node (Leaf [5; 25], Node (Leaf [7; 49], Leaf [11; 121])))
(* Counting leaves *)
- # treemonadizer (fun a c -> 1 + c a) t1 (fun i -> 0);;
+ # treemonadizer (fun a k -> 1 + k a) t1 (fun i -> 0);;
- : int = 5
We could simulate the tree state example too, but it would require
generalizing the type of the continuation monad to
- type ('a -> 'b -> 'c) continuation = ('a -> 'b) -> 'c;;
+ type ('a -> 'b -> 'k) continuation = ('a -> 'b) -> 'k;;
The binary tree monad
---------------------