/** * Extend * * 1. w.extend(g).extend(f) is equivalent to w.extend(_w => f(_w.extend(g))) * * extend :: Extend w => w a ~> (w a -> b) -> w b */ import { Functor, Functor1, Functor2 } from './Functor'; import { HKT, KindOf, URIS } from './HKT'; export interface Extend extends Functor { readonly extend: (wa: HKT, f: (wa: HKT) => B) => HKT; } export interface Extend1 extends Functor1 { readonly extend: (wa: KindOf, f: (wa: KindOf) => B) => KindOf; } export interface Extend2 extends Functor2 { readonly extend: (wa: KindOf, f: (wa: KindOf) => B) => KindOf; }