
Check the types!
map :: (a -> b) -> [a] -> [b]
Therefore:
map f :: [a] -> [b]
map . map :: (a -> b) -> [[a]] -> [[b]]
map (map f) :: [[a]] -> [[b]]
And,
concat :: [[a]] -> [a]
Put it all together and you should see how that rewrite works!
On Wed, Apr 7, 2021, 9:47 AM Galaxy Being
I'm in Bird's *Thinking Functionally with Haskell* and the topic is natural transformations. He says
filter p . map f = map f . filter (p . f)
and he has a proof, but one step of the proof he goes from
filter p . map f = concat . map (map f) . map (test (p . f))
to
filter p . map f = map f . concat . map (test (p . f))
which means
concat . map (map f) => map f . concat
which means
map (map f) = map f
... or I'm getting this step wrong somehow. To begin with, I'm having a hard time comprehending map(map f), Any ideas on how this is possible?
LB
_______________________________________________ Beginners mailing list Beginners@haskell.org http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners