From: jim Date: Thu, 19 Mar 2015 22:47:08 +0000 (-0400) Subject: explain mappable laws better X-Git-Url: http://lambda.jimpryor.net/git/gitweb.cgi?p=lambda.git;a=commitdiff_plain;h=ae88be93dd8082e711861466cf71e56173ff3866 explain mappable laws better --- diff --git a/topics/week7_introducing_monads.mdwn b/topics/week7_introducing_monads.mdwn index adcf0cc2..8f320140 100644 --- a/topics/week7_introducing_monads.mdwn +++ b/topics/week7_introducing_monads.mdwn @@ -130,7 +130,7 @@ has to obey the following Map Laws: `map (id : Î± -> Î±) = (id : Î± -> Î±)` `map (g â f) = (map g) â (map f)` - Essentially these say that `map` is a homomorphism from `(Î± -> Î², â, id)` to `(Î± -> Î², â', id')`, where `â'` and `id'` are `â` and `id` restricted to arguments of type `_`. + Essentially these say that `map` is a homomorphism from `(Î± -> Î², â, id)` to `(Î± -> Î², â', id')`, where `â'` and `id'` are `â` and `id` restricted to arguments of type `_`. That might be hard to digest because it's so abstract. Think of the following concrete example: if you take a `Î± list` (that's our `Î±`), and apply `id` to each of its elements, that's the same as applying `id` to the list itself. That's the first law. And if you apply the composition of functions `g â f` to each of the list's elements, that's the same as first applying `f` to each of the elements, and then going through the elements of the resulting list and applying `g` to each of those elements. That's the second law. These laws obviously hold for our familiar notion of `map` in relation to lists. * ***MapNable*** (in Haskelese, "Applicatives") A Mappable box type is *MapNable*