What about making this a semigroup? Those can be made monoids by wrapping them in Option. Isn't that what is happening here (you just have a named type)?

Just a thought.