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

Reply via email to