
Chaddaï Fouché wrote:
2007/9/25, Andrew Coppin
: I just found it rather surprising. Every time *I* try to compose with functions of more than 1 argument, the type checker complains.
There is no function that takes more than one argument in Haskell. ;-) map _could_ be seen as a function with 2 arguments, but in this case it's more useful to think of it as a function that take one argument f, a function that turn 'a into 'b and turn it into a new function that turn a list of 'a into a list of 'b.
This is why I found it so surprising - and annoying - that you can't use a 2-argument function in a point-free expression. For example, "zipWith (*)" expects two arguments, and yet sum . zipWith (*) fails to type-check. You just instead write \xs ys -> sum $ zipWith(*) xs ys which works as expected. I can't figure out why map . map works, but sum . zipWith (*) doesn't work. As I say, the only reason I can see is that the type checker hates me and wants to force me to write everything the long way round...