RE: Refactoring Semigroup/Monoid