Given the following (usual) definition of "map":

map                    :: (a -> b) -> [a] -> [b]
map f []               =  []
map f (x : xs)         =  f x : map f xs

What's the type of "map map"?

GHCi's :t command reveals:

*Main> :t map map
map map :: [a -> b] -> [[a] -> [b]]

I'd be grateful if anyone could provide a systematic type calculation so that I can reason through more complicated examples myself.

Thanks.


Windows Live™: Keep your life in sync. Check it out.