/** * Applicative * * 1. v.ap(A.of(x => x)) is equivalent to v (identity) * 2. A.of(x).ap(A.of(f)) is equivalent to A.of(f(x)) (homomorphism) * 3. A.of(y).ap(u) is equivalent to u.ap(A.of(f => f(y))) (interchange) * * of :: Applicative f => a -> f a */ import { Apply, Apply1, Apply2 } from './Apply'; import { HKT, KindOf, URIS } from './HKT'; export interface Applicative extends Apply { readonly of: (ma: A) => HKT; } export interface Applicative1 extends Apply1 { readonly of: (ma: A) => KindOf; } export interface Applicative2 extends Apply2 { readonly of: (ma: A) => KindOf; }