import { Functor, FunctorHKT } from './Functor';
import { CallHKT } from './HKT';
export interface ApplicativeHKT extends FunctorHKT {
    output: Applicative<this["input"]>;
}
export declare abstract class Applicative<A> extends Functor<A> {
    abstract amap<B, App extends ApplicativeHKT>(mapping: CallHKT<App, (value: A) => B>): CallHKT<App, B>;
    abstract pure<B, App extends ApplicativeHKT>(value: B): CallHKT<App, B>;
    static liftToApplicative<A, B, C, App extends ApplicativeHKT>(fn: (value: A) => (value: B) => C): (a: CallHKT<App, A>) => (b: CallHKT<App, B>) => CallHKT<App, C>;
    andIgnoreRight<B, App extends ApplicativeHKT>(b: CallHKT<App, B>): CallHKT<App, A>;
    andIgnoreLeft<B, App extends ApplicativeHKT>(b: CallHKT<App, B>): CallHKT<App, B>;
    and<B, App extends ApplicativeHKT>(b: CallHKT<App, B>): CallHKT<App, [A, B]>;
}
