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. ___
(+) / (++)static member (+) (x: 'Semigroup, y: 'Semigroup) : 'Semigroup
(x + y) + z = x + (y + z)
Monoid: A monoid is a Semigroup with an additional zero operation
From .Net/F#
list<'T>option<'T>voption<'T>array<'T>stringStringBuilderunitSet<'T>Map<'T, 'U>TimeSpanTuple<*>ValueTuple<*> ( * up to 7 elements)'T1* ... *'TnTask<'T>ValueTask<'T>'T -> 'SemigroupAsync<'T>Expr<'T>Lazy<'T>Dictionary<'T, 'U>IDictionary<'T, 'U>IReadOnlyDictionary<'T, 'U>ResizeArray<'T>seq<'T>IEnumerator<'T>From F#+