/** * Plus * * 1. x.alt(A.zero()) is equivalent to x (right identity) * 2. A.zero().alt(x) is equivalent to x (left identity) * 3. A.zero().map(f) is equivalent to A.zero() (annihilation) * * zero :: Plus f => () -> f a */ import { Alt, Alt1, Alt2 } from './Alt'; import { HKT, KindOf, URIS } from './HKT'; export interface Plus extends Alt { readonly zero: () => HKT; } export interface Plus1 extends Alt1 { readonly zero: () => KindOf; } export interface Plus2 extends Alt2 { readonly zero: () => KindOf; }