Containers and strictness continued

Edward Kmett ekmett at gmail.com
Fri Jul 9 16:29:21 EDT 2010


On Fri, Jul 9, 2010 at 4:18 PM, Claus Reinke <claus.reinke at talk21.com>wrote:

>   The idea would be to provide both IntMap and IntMap',
>>   the latter being strict in the keys. There would be one
>>
>
> strict in the values, of course..
>
> So instead of choosing between function' and function
> (doubling the API size) or between Data.IntMap.strict
> and Data.IntMap.nonstrict, clients would simply choose between IntMap' and
> IntMap (even a conversion could
> be offered - just another specialisation of map).  This module is small
> enough that one can compare
>
  the core output (-ddump-simpl), and it looks as if
>   the -O2 compiled core for the specialized versions
>   of mapL matches that for the handcoded versions.
>   No manual duplication, just pragmas, same code
>   and API, just different types for the two use cases.
>

Since I don't have much practice reading core, it would
> be good if those of you with more core experience could check this
> assertion; also on whether there is any reason
> to expect difficulties extending this to Data.{IntMap,Map}.


Honestly I think the code duplication is more likely to yield robust, fast
code. It can be hard to make anything where the entire API goes through a
huge dictionary generate well-performing core.

foldl', foldr' and their ilk are common enough that folks are pretty
comfortable with that convention.

 mapL :: (L l a,L l b) => (a -> b) -> l a -> l b
> {-# SPECIALIZE mapL :: (a -> b) -> L1 a -> L1 b #-}
> {-# SPECIALIZE mapL :: (a -> b) -> L2 a -> L2 b #-}
>

If only the type-specialized maps would be exported
> (with map instead of mapL and IntMap'/IntMap instead of L1/L2), neither the
> class nor the language pragmas would affect client code, so this could be a
> mostly
> compatible extension. I'm not sure how to do that without writing more
> code, though - any suggestions?
>

Providing an entire IntMap' seems fairly drastic. Now you wind up with a
whole host of interoperability scenarios. It strikes me that the cure is
worse than the disease.

-Edward Kmett
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://www.haskell.org/pipermail/libraries/attachments/20100709/41a5d546/attachment.html


More information about the Libraries mailing list