import { Functor, AbstractFunctor } from "./functor"; import { Either } from "./either"; export interface ApplicativeDictionary { of: (b: B) => Applicative; } export interface Applicative extends Functor { of: (b: B) => Applicative; ap(a: Applicative<(a: A) => B>): Applicative; lift(f: (t: T1) => R, m: Applicative): Applicative; lift(f: (t: T1, u: T2) => R, m1: Applicative, m2: Applicative): Applicative; lift(f: (t1: T1, t2: T2, t3: T3) => R, m1: Applicative, m2: Applicative, m3: Applicative): Applicative; map(f: (a: A) => B): Applicative; } export declare abstract class AbstractApplicative extends AbstractFunctor implements Applicative { abstract of(b: B): Applicative; ap(f: Applicative<(a: A) => B>): Applicative; lift(f: (t: T1) => R, m: Applicative): Applicative; lift(f: (t: T1, u: T2) => R, m1: Applicative, m2: Applicative): Applicative; lift(f: (t1: T1, t2: T2, t3: T3) => R, m1: Applicative, m2: Applicative, m3: Applicative): Applicative; map(f: (a: A) => B): Applicative; } export declare function applicative(constructor: Function): void; export declare function of(d: ApplicativeDictionary | ArrayConstructor, a: A): any; export declare function ap(fa: Applicative<(a: A) => B>, ba: Applicative): any; export declare function lift(f: (t: T1) => R, m: Applicative): any; export declare function lift(f: (t: T1, u: T2) => R, m1: Applicative, m2: Applicative): any; export declare function lift(f: (t1: T1, t2: T2, t3: T3) => R, m1: Applicative, m2: Applicative, m3: Applicative): any; export declare function lift(f: (t: T1) => R, m: Either): Either; export declare function lift(f: (t: T1, u: T2) => R, m1: Either, m2: Either): Either; export declare function lift(f: (t1: T1, t2: T2, t3: T3) => R, m1: Either, m2: Either, m3: Either): Either; export declare function lift(f: (t: A) => R, a: A[]): R[]; export declare function lift(f: (a: A, b: B) => R, a: A[], b: B[]): R[]; export declare function lift(f: (a: A, b: B, c: B) => R, a: A[], b: B[], c: C[]): R[]; export declare function seq>(a: Applicative, b: F): F;