[containers] Proposal: Change to the Data.Map Monoid

Andreas Abel abela at chalmers.se
Tue May 20 18:49:04 UTC 2014

I think the Monoid instance for Data.Map should be *removed*.

Reason:  there are at least two meaningful instances.

And, the documentation for the current instance is as out spoken as the 
fish in my non-existent aquarium:


So, to use the Monoid instance, one has to consult the source code, just 
to see:

instance (Ord k) => Monoid (Map k v) where
     mempty  = empty
     mappend = union
     mconcat = unions

Fantastic!  I could never have though of these cunning implementations 
myself (sorry, sarcasm, I know).

Why not trash these oneliners and free the Monoid instance for whatever 
the user wants it to do?

Of course, I know, pragmatics, we cannot just remove functionality, 
might break existing code.

But at least not silently.

Maybe this could be sneaked in with another incompatible change of the 
Data.Map package?  And after five years of having no Monoid instance, 
one could think of adding the most useful one.  Or rather not, but have 
two newtypes with the respective meaningful implementations.  Which we 
can also have here and now.

On 19.05.2014 07:05, Henning Thielemann wrote:
> Am 19.05.2014 02:05, schrieb Nick Partridge:
>> instance Monoid v => Monoid (Map k v) where
>>      mappend = unionWith mappend
>> This lets us build up maps with values in a useful Monoid, and mappend
>> them with gusto.
> This was discussed two years ago:
>    http://www.haskell.org/pipermail/libraries/2012-April/017743.html
> That said, I'd also prefer your instance.
> _______________________________________________
> Libraries mailing list
> Libraries at haskell.org
> http://www.haskell.org/mailman/listinfo/libraries

Andreas Abel  <><      Du bist der geliebte Mensch.

Department of Computer Science and Engineering
Chalmers and Gothenburg University, Sweden

andreas.abel at gu.se

More information about the Libraries mailing list