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
_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to