Containers and folds

wren ng thornton wren at
Sat Sep 25 18:26:46 EDT 2010

On 9/25/10 9:41 AM, Johan Tibell wrote:
> On Sat, Sep 25, 2010 at 2:41 PM, Ian Lynagh<igloo at>  wrote:
>> On Fri, Sep 24, 2010 at 07:09:56PM +0200, Milan Straka wrote:
>>> I therefore propose to:
>>> a) add foldrWithKey and foldlWithKey to IntMap, make foldWithKey
>>>     deprecated and synonymous for foldrWithKey.
>> Agree.
>> Why not also add foldl and foldr to Map and IntMap, and deprecate fold?
> I think having all these with and without key version of all the
> functions in Data.{Map,Set} is a misstake. They don't improve
> performance (I've checked) and they almost double the size of the API
> (which is a whopping ~150 functions!). We probably* can't do much
> about the functions already in the API, but lets discuss whether we
> really want to continue that pattern.

Why not (a) only specify the *WithKey variants explicitly, and (b) 
provide the rest via the Foldable class?

There are no class methods which cannot be expressed easily by the 
explicit API; we'll want the Foldable instance anyways;... The only 
breakage I can foresee is that people can't use the qualified import 
name with the Foldable methods.

Live well,

More information about the Libraries mailing list