From: jim Date: Mon, 23 Mar 2015 14:18:15 +0000 (-0400) Subject: use arrow for mid X-Git-Url: http://lambda.jimpryor.net/git/gitweb.cgi?p=lambda.git;a=commitdiff_plain;h=29fb3ed9c63e37aeaeef765c1c11986bd1f84f41 use arrow for mid --- diff --git a/topics/week8_safe_division_with_monads.mdwn b/topics/week8_safe_division_with_monads.mdwn index cdaa949e..3e3e14c0 100644 --- a/topics/week8_safe_division_with_monads.mdwn +++ b/topics/week8_safe_division_with_monads.mdwn @@ -214,13 +214,13 @@ To illustrate some of the polymorphism, here's how we could `map1` the `is_even` - : int option -> bool option = 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 = - 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 -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) =