Haskell 98 semigroupshttp://hackage.haskell.org/package/semigroups
In mathematics, a semigroup is an algebraic structure consisting of a set
together with an associative binary operation. A semigroup generalizes
a monoid in that there might not exist an identity element. It also (originally)
generalized a group (a monoid with all inverses) to a type where every element
did not have to have an inverse, thus the name semigroup.