/** * Apply * * 1. v.ap(u.ap(a.map(f => g => x => f(g(x))))) is equivalent to v.ap(u).ap(a) (composition) * * ap :: Apply f => f a ~> f (a -> b) -> f b */ import { Functor, Functor1, Functor2 } from './Functor'; import { HKT, KindOf, URIS } from './HKT'; export interface Apply extends Functor { readonly ap: (fab: HKT B>, fa: HKT) => HKT; } export interface Apply1 extends Functor1 { readonly ap: (fab: KindOf B]>, fa: KindOf) => KindOf; } export interface Apply2 extends Functor2 { readonly ap: (fab: KindOf B]>, fa: KindOf) => KindOf; }