import { Functor } from './functor';
export declare abstract class Applicative<a> extends Functor<a> {
    abstract fmap<b>(f: (a: a) => b): Applicative<b>;
    abstract ap<a, b>(this: Applicative<(a: a) => b>, a: Applicative<a>): Applicative<b>;
    abstract bind<b>(f: (a: a) => Applicative<b>): Applicative<b>;
}
export declare namespace Applicative {
    function pure<a>(a: a): Applicative<a>;
    function ap<a, b>(af: Applicative<(a: a) => b>, aa: Applicative<a>): Applicative<b>;
    function ap<a, b>(af: Applicative<(a: a) => b>): (aa: Applicative<a>) => Applicative<b>;
}
