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];