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.