Summary of containers patches

Johan Tibell johan.tibell at gmail.com
Fri Sep 24 07:14:30 EDT 2010


On Fri, Sep 24, 2010 at 12:58 PM, Simon Peyton-Jones
<simonpj at microsoft.com> wrote:
> Can you give some examples to back up this claim?  I am skeptical

I can look into it again after ICFP.

I did spend some time trying to tease apart the performance
improvements we got from inlining foldl'. From what I remember, the
biggest gain from inlining is that the higher-order argument is known,
but there's some additional gain from unboxing the accumulator (and
some additional gain from inlining simple higher-order arguments like
(+) into the body of foldl').

> That’s what the auto-specialisation I described does.
>
> You can’t write a SECIALISE pragma in the libray for a type that is defined by the client.  This is very very common

Right, I think that's the reason we rely on INLINING pragmas so much.
Inlining gives us the effect of specialize, but at types not known to
the library author. I don't think we really want to force inlining,
but want to say something like this:

foldl' :: (a -> b -> a) -> a -> [b] -> a
foldl' = ...
{-# SPECIALIZABLE foldl' #-}

and then have foldl' be specialized in the client module at whatever
type it's called at, but only once for each type (instead of once per
call site).

-- Johan


More information about the Libraries mailing list