/** * Foldable * * 1. u.reduce is equivalent to u.reduce((acc, x) => acc.concat([x]), []).reduce * * reduce :: Foldable f => f a ~> (b, (b, a) -> b) -> b */ import { HKT, KindOf, URIS } from './HKT'; export interface Foldable { readonly URI: F; readonly reduce: (fa: HKT, b: B, f: (b: B, a: A) => B) => B; } export interface Foldable1 { readonly URI: F; readonly reduce: (fa: KindOf, b: B, f: (b: B, a: A) => B) => B; } export interface Foldable2 { readonly URI: F; readonly reduce: (fa: KindOf, b: B, f: (b: B, a: A) => B) => B; }