Legend:
Library
Module
Module type
Parameter
Class
Class type
An interface for a type with a binary, associative operator over it.
"A semigroup is an algebraic structure consisting of a set together with an associative binary operation" (wikipedia).
"The term 'semigroup' is standard, but semi-monoid would be more systematic." ncatlab
Modules that implement the semigroup interface are a structural subtype of the better known Monoids interface. Semigroups are differentiated from Monoids by the absence of a unit (or identity) element. in their specification.
Law notes the laws that should be obeyed by any instantiation of Semigroup in the form of predicates that should be true for any arguments of the appropriate type.
Constructors
Functions and module functors for creating implementations of Semigroups