index cdaa949..933ded8 100644 (file)
@@ -214,13 +214,13 @@ To illustrate some of the polymorphism, here's how we could `map1` the `is_even`
- : int option -> bool option = <fun>

Wherever we have a well-defined monad, we can define the `mapN` operations for them in terms
- : int option -> bool option = <fun>

Wherever we have a well-defined monad, we can define the `mapN` operations for them in terms
-of their `>>=` and `mid`. The general pattern is:
+of their `>>=` and `⇧`/`mid`. The general pattern is:

mapN (g : 'a1 -> ... 'an -> 'result) (u1 : 'a1 option) ... (un : 'an option) : 'result option =

mapN (g : 'a1 -> ... 'an -> 'result) (u1 : 'a1 option) ... (un : 'an option) : 'result option =
-      u1 >>= (fun x1 -> ... un >>= (fun xn -> mid (g x1 ... xn)) ...)
+      u1 >>= (fun x1 -> ... un >>= (fun xn -> (g x1 ... xn)) ...)

Our above definitions of `map` and `mapN` were of this form, except we just

Our above definitions of `map` and `mapN` were of this form, except we just
-explicitly supplied the definition of `mid` for the Option/Maybe monad (namely, in OCamlese, the constructor `Some`).
+explicitly supplied the definition of `` for the Option/Maybe monad (namely, in OCamlese, the constructor `Some`).
If you substitute in the definition of `>>=`, you can see these are equivalent to:

map (g : 'a -> 'b) (u : 'a option) =
If you substitute in the definition of `>>=`, you can see these are equivalent to:

map (g : 'a -> 'b) (u : 'a option) =