On Thu, Aug 19, 2010 at 6:52 PM, Ian Lynagh <igloo@earth.li> wrote:
On Thu, Aug 19, 2010 at 11:38:10AM +0200, Johan Tibell wrote:
>
> I tried doing the "standard" worker/wrapper transform to some functions in
> Data.Map. For example, by transforming
>
>     insertWithKey' f kx x t0
>       = case t of
>
> to
>
>     insertWithKey' f kx x t0 = kx `seq` go t0
>       where
>         go t = case t of
>
> I got a 16% speedup on this benchmark:

Looks like as well as W/W you've also made it strict in the key, so this
speedup isn't all W/W.

Right. Like Milan did in his work on containers I made the function key strict. This doesn't really make a difference in practice as far as semantics go as the function is already key strict iff the map isn't empty. I'll make a libraries proposal with the code changes so people can decide if this is something we want.

Note: Most of the speedup comes from W/W though.

-- Johan