author Jim Pryor Mon, 13 Dec 2010 04:20:39 +0000 (23:20 -0500) committer Jim Pryor Mon, 13 Dec 2010 04:20:39 +0000 (23:20 -0500)
Signed-off-by: Jim Pryor <profjim@jimpryor.net>

index e309faa..0d9e33d 100644 (file)
@@ -293,7 +293,7 @@ it through:
Later, we will talk more about controlling the order in which nodes are visited.

One more revealing example before getting down to business: replacing
Later, we will talk more about controlling the order in which nodes are visited.

One more revealing example before getting down to business: replacing
-`state` everywhere in `tree_monadize` with `list` gives us
+`state` everywhere in `tree_monadize` with `list` lets us do:

# let decider i = if i = 2 then [20; 21] else [i];;

# let decider i = if i = 2 then [20; 21] else [i];;
@@ -311,11 +311,11 @@ one for each choice of `int`s for its leaves.
Now for the main point.  What if we wanted to convert a tree to a list
of leaves?

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;;
+       type ('r,'a) 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 continuation_unit a = fun k -> k a;;
let continuation_bind u f = fun k -> u (fun a -> f a k);;

-       let rec tree_monadize (f : 'a -> ('b, 'r) continuation) (t : 'a tree) : ('b tree, 'r) continuation =
+       let rec tree_monadize (f : 'a -> ('r,'b) continuation) (t : 'a tree) : ('r,'b tree) continuation =
match t with
| Leaf a -> continuation_bind (f a) (fun b -> continuation_unit (Leaf b))
| Node (l, r) -> continuation_bind (tree_monadize f l) (fun l' ->
match t with
| Leaf a -> continuation_bind (f a) (fun b -> continuation_unit (Leaf b))
| Node (l, r) -> continuation_bind (tree_monadize f l) (fun l' ->
@@ -368,7 +368,7 @@ interesting functions for the first argument of `tree_monadize`:
It's not immediately obvious to us how to simulate the List monadization of the tree using this technique.

We could simulate the tree annotating example by setting the relevant
It's not immediately obvious to us how to simulate the List monadization of the tree using this technique.

We could simulate the tree annotating example by setting the relevant
-type to `('a, 'state -> 'result) continuation`.
+type to `(store -> 'result, 'a) continuation`.

Andre Filinsky has proposed that the continuation monad is