-1

I think types that lack an empty element are a misfeature.  They usually end up contaminating everything they touch, which is why semigroups forms an entire parallel ecosystem of its own.  This is a very slippery slope that won't end with the addition of `Data.Semigroup` and once it is in it will be impossible to take it out.