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

Nick Partridge nkpart at gmail.com
Mon May 19 00:05:36 UTC 2014


Currently the Monoid instance for Data.Map is implemented using
union/unions, which are left biased. On key collision, it discards values
from the right hand side of `mappend` -

If you compare this with the Monoid for Maybe, it's like we're defaulting
to First as the monoid instance for maps.

A more useful instance, however very much a breaking change, would be to
make the instance depend on a Monoid (or better yet, a Semigroup) for the
values in the map:

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.


- Nick Partridge

Discussion period: 2 weeks.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.haskell.org/pipermail/libraries/attachments/20140519/befbe201/attachment.html>

More information about the Libraries mailing list