[Haskell-cafe] Help understanding a partial application
ryani.spam at gmail.com
Mon Aug 27 00:54:21 EDT 2007
Just expand out the function composition:
Dual . Endo . flip f = (\x -> Dual (Endo (flip f x)))
which has the type d -> Dual (Endo c).
On 8/26/07, Levi Stephen <levi.stephen at optusnet.com.au> wrote:
> I was browsing through the source code for Data.Foldable and having
> comprehending it (which was kind of the point of browsing the code, so I
> 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?
> Haskell-Cafe mailing list
> Haskell-Cafe at haskell.org
-------------- next part --------------
An HTML attachment was scrubbed...
More information about the Haskell-Cafe