/** * Group * * 1. g.concat(g.invert()) is equivalent to g.constructor.empty() (right inverse) * 2. g.invert().concat(g) is equivalent to g.constructor.empty() (left inverse) * * invert :: Group g => g ~> () -> g */ import { HKT, KindOf, URIS } from './HKT'; import { Monoid, Monoid1, Monoid2 } from './Monoid'; export interface Group extends Monoid { readonly invert: () => HKT; } export interface Group1 extends Monoid1 { readonly invert: () => KindOf; } export interface Group2 extends Monoid2 { readonly invert: () => KindOf; }