What's a monoid?
A 3-tuple (T, OP, IDENT) where T is a type, OP is an associative binary operator with the function signature of (T, T) => T, and IDENT is a value of type T that is an identity under the operator OP.
For example:
(Int, +, 0) is a monoid.
Addition (+) is an associative binary operator that takes 2 Int arguments and produces a single Int result.
0 is the identity element under addition (+) because X + 0 = X where X is an integer.