
Sjoerd, I am sorry, as I already wrote, I decided to deprecate the package.
[3] defines the union as h(u) = max(f(u), g(u)) where f, g and h are multiplicity functions.
Which is the same, as [3] is about multisets, not signed multisets.
[...] and this is also what your implementation does. (Map.unionWith max does not do a max if the key is not in one of the maps, i.e. if one of the multiplicities is 0.)
I am aware of that. Why are you explaining this?
I think if your union would follow the definition with max as in [3] and [4] it is not confusing. But then empty would not be the identity of that union (that would be the signed multiset with multiplicity negative infinity for all elements), so it would still not be a good choice for the Monoid instance.
Let's agree to disagree. This is not constructive and, moreover, going nowhere. Cheers, Stefan
[3] Apostolos Syropoulos: Mathematics of Multisets. WMP 2000: 347-358