[containers] Proposal: Change to the Data.Map Monoid
Edward Kmett
ekmett at gmail.com
Mon May 19 02:19:13 UTC 2014
This results in a silent change of semantics for all current users and _will_ break existing code _silently_.
I am -1 on this change as there is no good way to manage the transition especially due to containers use as a boot package and the modicum of improvement strikes me as not worth the transition price.
Moreover it is the "wrong" constraint.
Maybe for instance is a terrible example to motivate this proposal as it adjoins a unit to a monoid pretending it is a semigroup to get a monoid.
To union two maps we don't need a unit.
Were Map/IntMap being defined from scratch? Reasonable. But given the very very large body of code that sits atop them that would break I have a hard time advocating for the ensuing debugging hell and silent breakages,
Sent from my iPhone
> On May 18, 2014, at 5:05 PM, Nick Partridge <nkpart at gmail.com> wrote:
>
> Hi,
>
> 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` - https://github.com/ghc/packages-containers/blob/bae098fb0a3994bc2b0ec3313004b40cd097ed8d/Data/Map/Base.hs#L341-L344
>
> 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.
>
> Thoughts?
>
> - Nick Partridge
>
> Discussion period: 2 weeks.
> _______________________________________________
> Libraries mailing list
> Libraries at haskell.org
> http://www.haskell.org/mailman/listinfo/libraries
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.haskell.org/pipermail/libraries/attachments/20140518/e2981538/attachment.html>
More information about the Libraries
mailing list