X-Git-Url: http://lambda.jimpryor.net/git/gitweb.cgi?p=lambda.git;a=blobdiff_plain;f=topics%2Fweek7_introducing_monads.mdwn;h=06dd06e32f409d8cbcb25f9a29b7d65cb56bf0f5;hp=c778bb7ea4289febc2cb486cbdc187962969d85b;hb=ec3beaf6933b52a2434f08d4e93829bfbaa3d043;hpb=d2cd63fe26f3777ee6fb7a6005bf28e30c0381f0 diff --git a/topics/week7_introducing_monads.mdwn b/topics/week7_introducing_monads.mdwn index c778bb7e..06dd06e3 100644 --- a/topics/week7_introducing_monads.mdwn +++ b/topics/week7_introducing_monads.mdwn @@ -380,7 +380,7 @@ That can be helpful, but it only enables us to have _zero or one_ elements in th let rec catmap (k : α -> β list) (xs : α list) : β list = match xs with | [] -> [] - | x' :: xs' -> List.append (k x') (catmap f xs') + | x' :: xs' -> List.append (k x') (catmap k xs') Now we can have as many elements in the result for a given `α` as `k` cares to return. Another way to write `catmap k xs` is as (Haskell) `concat (map k xs)` or (OCaml) `List.flatten (List.map k xs)`. And this is just the definition of `mbind` or `>>=` for the List Monad. The definition of `mcomp` or `<=<`, that we gave above, differs only in that it's the way to compose two functions `j` and `k`, that you'd want to `catmap`, rather than the way to `catmap` one of those functions over a value that's already a list.