Finally, we're getting consistent principle types, so we can stop.
These types should remind you of the simply-typed lambda calculus
types for Church numerals (`(o -> o) -> o -> o`) with one extra bit
-thrown in (in this case, and int).
+thrown in (in this case, an int).
So here's our type constructor for our hand-rolled lists:
So an `('a, 'b) list'` is a list containing elements of type `'a`,
where `'b` is the type of some part of the plumbing. This is more
general than an ordinary Ocaml list, but we'll see how to map them
-into Ocaml lists soon. We don't need to grasp the role of the `'b`'s
+into Ocaml lists soon. We don't need to fully grasp the role of the `'b`'s
in order to proceed to build a monad:
l'_unit (x:'a):(('a, 'b) list) = fun x -> fun f z -> f x z