`Monad` is a monoid, however it's a monoid in a different way than, say, `Integer`. I wonder if there is a way to write `Monoid'` and `Monad'` such that both `Integer` and `Monad'` can be expressed as instances of the same `Monoid'` typeclass?