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.

Homepage:
http://hackage.haskell.org/cgi-bin/hackage-scripts/package/semigroups
