X-Git-Url: http://lambda.jimpryor.net/git/gitweb.cgi?p=lambda.git;a=blobdiff_plain;f=topics%2Fweek8_safe_division_with_monads.mdwn;h=933ded83b60f6eb2f0e367184775645e7bf265a1;hp=cdaa949e4934e71265a9cfb2f0df399dc25fd967;hb=7f98aa5b7f740662593c87e0fe138c95a62ede85;hpb=c7724ab43624fa37c971971f40799c2d5527fac0;ds=sidebyside diff --git a/topics/week8_safe_division_with_monads.mdwn b/topics/week8_safe_division_with_monads.mdwn index cdaa949e..933ded83 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) =