[Haskell-cafe] Re: Very crazy

jerzy.karczmarczuk at info.unicaen.fr jerzy.karczmarczuk at info.unicaen.fr
Tue Sep 25 07:15:54 EDT 2007

Andrew Coppin writes: 

> ...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...

I suspect that it is you who hates the Haskell type-checker, forcing it
to work on expressions which go against the rules: precedence, and
normal order.
The transformation to combinators is doable, but one has to be careful.
Let's see: 

res p q = sum (zipWith (*) p q) = (sum . (zipWith (*) p)) q
res p = (sum .) (zipWith (*) p) = ((sum .) . (zipWith (*)) p 

res = (sum .) . (zipWith (*)) 

Certainly it is a kind of madness, since is hardly readable, but it
is correct. 

Jerzy Karczmarczuk 

More information about the Haskell-Cafe mailing list