Daniel Peebles | 28 Apr 03:04 2012

A more useful Monoid instance for Data.Map

Hi all,

Currently Data.Map has a Monoid instance, but it's rather lossy and not as general as it could be:
instance (Ord k) => Monoid (Map k v) where mempty = empty mappend = union mconcat = unions
The instance would be much nicer if it required a Monoid on v and used unionWith mappend instead of just union. The current behavior could be emulated by using First/Last as the Monoid (or ideally a semigroup, but that's or another discussion), but other more interesting Monoid instances could also be used for the values. I realize that changing instances could break code, but I'd be curious to see how many people even use the current monoid instance. Does anyone have any system for testing hypotheses like this (by typechecking a large randomized chunk of hackage or something)? It looks like the idea has been around for at least five years: http://hackage.haskell.org/trac/ghc/ticket/1460 but the proposal was abandoned, so I wanted to see if I could get people to start talking about it again. Thanks,Dan
Libraries mailing list
Libraries <at> haskell.org