/**
* The `Associative` type class describes an associative binary operator
* for a type `A`. For example, addition for integers, and string
* concatenation for strings.
*
* @tsplus type Associative
*/
export interface Associative extends Closure {
readonly Law: Closure["Law"] & { readonly Associative: "Associative" }
}
/**
* @tsplus type Associative/Ops
*/
export interface AssociativeOps {
(combine: (x: A, y: A) => A): Associative
}
export const Associative: AssociativeOps = (combine: (x: A, y: A) => A): Associative =>
HKT.instance({ combine })