/** * Equivalent to a `Monoid`. * * @tsplus type AssociativeIdentity */ export interface AssociativeIdentity extends Associative { readonly Law: Associative["Law"] & { readonly Identity: "Identity" } readonly identity: A } /** * @tsplus type AssociativeIdentity/Ops */ export interface AssociativeIdentityOps { (identity: A, combine: (x: A, y: A) => A): AssociativeIdentity } export const AssociativeIdentity: AssociativeIdentityOps = ( identity: A, combine: (x: A, y: A) => A ): AssociativeIdentity => HKT.instance({ identity, combine })