[Haskell-cafe] Help understanding a partial application

Ryan Ingram 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).

  -- ryan


On 8/26/07, Levi Stephen <levi.stephen at optusnet.com.au> wrote:
>
> 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 at haskell.org
> http://www.haskell.org/mailman/listinfo/haskell-cafe
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://www.haskell.org/pipermail/haskell-cafe/attachments/20070826/cb03b9ba/attachment-0001.htm


More information about the Haskell-Cafe mailing list