[Haskell-cafe] Help understanding a partial application

Levi Stephen levi.stephen at optusnet.com.au
Sun Aug 26 20:34:26 EDT 2007


Hi,

I was browsing through the source code for Data.Foldable and having trouble 
comprehending it (which was kind of the point of browsing the code, so I could 
learn something ;) )

I'm looking at foldl

foldl :: (c -> d -> c) -> c -> t d -> c
foldl f z t = appEndo (getDual (foldMap (Dual . Endo . flip f) t)) z

But, I haven't got very far. I'm still trying to follow:

Endo . flip f

f is of type c->d->c, so this makes flip f of type d->c->c.

I think the Endo constructor is of type (a->a)->Endo a

I think a is binding to a function type here, but can not work out what.

(From memory) ghci reports

 > :t Endo . flip (+)
Num a => a -> Endo a

So, this looks like a partial application of the constructor?

But, this still isn't helping me understand.

Any thoughts or pointers that might help me comprehend what's happening?

Thanks,
Levi
lstephen.wordpress.com


More information about the Haskell-Cafe mailing list