If zippers are continuations reified (defuntionalized), then one route
to continuations is to re-functionalize a zipper. Then the
concreteness and understandability of the zipper provides a way of
-understanding and equivalent treatment using continuations.
+understanding an equivalent treatment using continuations.
Let's work with lists of `char`s for a change. To maximize readability, we'll
indulge in an abbreviatory convention that "abSd" abbreviates the
`make_list 'a' (make_list 'b' (make_list 'S' (make_list 'd' empty)))`). The
recipe for constructing the list goes like this:
-> (0) Start with the empty list []
-> (1) make a new list whose first element is 'd' and whose tail is the list constructed in step (0)
-> (2) make a new list whose first element is 'S' and whose tail is the list constructed in step (1)
-> -----------------------------------------
-> (3) make a new list whose first element is 'b' and whose tail is the list constructed in step (2)
+> (0) Start with the empty list []
+> (1) make a new list whose first element is 'd' and whose tail is the list constructed in step (0)
+> (2) make a new list whose first element is 'S' and whose tail is the list constructed in step (1)
+> -----------------------------------------
+> (3) make a new list whose first element is 'b' and whose tail is the list constructed in step (2)
> (4) make a new list whose first element is 'a' and whose tail is the list constructed in step (3)
What is the type of each of these steps? Well, it will be a function