Sjoerd, >>> This is not just about map, but it also a problem for the Monoid instance. >>> You are basically adding an extra identity element, 0, to the max monoid, >>> which works but is weird.
>> Still that's how union is typically defined for hybrid sets. It's what >> happens if want union and empty to behave as generalisations of these >> concepts for ordinary (multi)sets. > Then why would you want that? You don't have to. (SignedMultiset a, additiveUnion, empty) gives you the Monoid that you seem to have a preference for. The library supplies it through the Additive wrapper. The point is that you have a choice: different applications may ask for different monoidal structures. >> *Data.SignedMultiset> let empty' = insert () $ delete () empty >> >> *Data.SignedMultiset> empty' `union` delete () empty == empty' >> False >> >> *Data.SignedMultiset> empty `union` delete () empty == delete () empty >> True > Ah, I missed the check in insertMany. > > What about the same with > > let empty' = multiply 0 $ delete () empty *Data.SignedMultiset> let empty' = multiply 0 $ delete () empty *Data.SignedMultiset> empty' `union` delete () empty == empty' True *Data.SignedMultiset> empty `union` delete () empty == delete () empty True Cheers, Stefan _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe