/** * A `Magma` is a pair `(A, concat)` in which `A` is a non-empty set and `concat` is a binary operation on `A` * * `Magma` is a precursor to `Semigroup`: `Magma` only has a closure requrement, while `Semigroup` must have an associative operation. * * @category Type Classes * @since 1.0.0 */ export interface Magma { readonly combine_: (x: A, y: A) => A readonly combine: (y: A) => (x: A) => A } export interface CombineFn_ { (x: A, y: A): A } export interface CombineFn { (y: A): (x: A) => A }