import { Functor } from "./functor";
import { Foldable, AbstractFoldable } from "./foldable";
import { Applicative, ApplicativeDictionary } from "./applicative";
export interface Traversable extends Functor, Foldable {
traverse(a: ApplicativeDictionary, f: (a: A) => Applicative): Applicative>;
sequence(a: ApplicativeDictionary, t: Traversable>): Applicative>;
}
export declare abstract class AbstractTraversable extends AbstractFoldable implements Traversable {
map(f: (a: A) => B): Traversable;
mapTo(b: B): Functor;
traverse(a: ApplicativeDictionary, f: (a: A) => Applicative): Applicative>;
sequence(a: ApplicativeDictionary, t: Traversable>): Applicative>;
foldr(f: (a: A, b: B) => B, acc: B): B;
}
export declare function traversable(constructor: Function): void;
export declare function sequence(a: ApplicativeDictionary, t: Applicative[]): any;
export declare function sequence(a: ApplicativeDictionary, t: Traversable>): any;
export declare function traverse(a: ApplicativeDictionary, f: (a: A) => Applicative, t: A[]): any;
export declare function traverse(a: ApplicativeDictionary, f: (a: A) => Applicative, t: Traversable): any;
export declare function mapAccumR(f: (acc: C, a: A) => [C, B], init: C, t: Traversable): [C, Traversable];