/** * `Traversable` represents data structures which can be _traversed_ accumulating results and effects in some * `Applicative` functor. * * - `traverse` runs an action for every element in a data structure, and accumulates the results. * - `sequence` runs the actions _contained_ in a data structure, and accumulates the results. * * The `traverse` and `sequence` functions should be compatible in the following sense: * * - `traverse(A)(xs, f) <-> sequence(A)(A.map(xs, f))` * - `sequence(A)(xs) <-> traverse(A)(xs, identity)` * * where `A` is an `Applicative` instance * * `Traversable` instances should also be compatible with the corresponding `Foldable` instances, in the following sense: * * ```ts * import { getApplicative, make } from 'fp-ts/Const' * * const A = getApplicative(M) * * foldMap(M)(xs, f) = traverse(A)(xs, a => make(f(a))) * ``` * * where `M` is a `Monoid` instance * * @since 2.0.0 */ import { Applicative, Applicative1, Applicative2, Applicative2C, Applicative3, Applicative3C, Applicative4 } from './Applicative.js'; import { Foldable, Foldable1, Foldable2, Foldable2C, Foldable3, FoldableComposition, FoldableComposition11 } from './Foldable.js'; import { Functor, Functor1, Functor2, Functor2C, Functor3, FunctorComposition, FunctorComposition11 } from './Functor.js'; import { HKT, Kind, Kind2, Kind3, Kind4, URIS, URIS2, URIS3, URIS4 } from './HKT.js'; /** * @category model * @since 2.0.0 */ export interface Traversable extends Functor, Foldable { /** * Runs an action for every element in a data structure and accumulates the results */ readonly traverse: Traverse; readonly sequence: Sequence; } /** * @category model * @since 2.0.0 */ export interface Traversable1 extends Functor1, Foldable1 { readonly traverse: Traverse1; readonly sequence: Sequence1; } /** * @category model * @since 2.0.0 */ export interface Traversable2 extends Functor2, Foldable2 { readonly traverse: Traverse2; readonly sequence: Sequence2; } /** * @category model * @since 2.0.0 */ export interface Traversable2C extends Functor2C, Foldable2C { readonly traverse: Traverse2C; readonly sequence: Sequence2C; } /** * @category model * @since 2.0.0 */ export interface Traversable3 extends Functor3, Foldable3 { readonly traverse: Traverse3; readonly sequence: Sequence3; } /** * @since 2.0.0 */ export interface Traverse { (F: Applicative4): (ta: HKT, f: (a: A) => Kind4) => Kind4>; (F: Applicative3): (ta: HKT, f: (a: A) => Kind3) => Kind3>; (F: Applicative3C): (ta: HKT, f: (a: A) => Kind3) => Kind3>; (F: Applicative2): (ta: HKT, f: (a: A) => Kind2) => Kind2>; (F: Applicative2C): (ta: HKT, f: (a: A) => Kind2) => Kind2>; (F: Applicative1): (ta: HKT, f: (a: A) => Kind) => Kind>; (F: Applicative): (ta: HKT, f: (a: A) => HKT) => HKT>; } /** * @since 2.0.0 */ export interface Traverse1 { (F: Applicative4): (ta: Kind, f: (a: A) => Kind4) => Kind4>; (F: Applicative3): (ta: Kind, f: (a: A) => Kind3) => Kind3>; (F: Applicative3C): (ta: Kind, f: (a: A) => Kind3) => Kind3>; (F: Applicative2): (ta: Kind, f: (a: A) => Kind2) => Kind2>; (F: Applicative2C): (ta: Kind, f: (a: A) => Kind2) => Kind2>; (F: Applicative1): (ta: Kind, f: (a: A) => Kind) => Kind>; (F: Applicative): (ta: Kind, f: (a: A) => HKT) => HKT>; } /** * @since 2.0.0 */ export interface Traverse2 { (F: Applicative4): (ta: Kind2, f: (a: A) => Kind4) => Kind4>; (F: Applicative3): (ta: Kind2, f: (a: A) => Kind3) => Kind3>; (F: Applicative3C): (ta: Kind2, f: (a: A) => Kind3) => Kind3>; (F: Applicative2): (ta: Kind2, f: (a: A) => Kind2) => Kind2>; (F: Applicative2C): (ta: Kind2, f: (a: A) => Kind2) => Kind2>; (F: Applicative1): (ta: Kind2, f: (a: A) => Kind) => Kind>; (F: Applicative): (ta: Kind2, f: (a: A) => HKT) => HKT>; } /** * @since 2.0.0 */ export interface Traverse2C { (F: Applicative4): (ta: Kind2, f: (a: A) => Kind4) => Kind4>; (F: Applicative3): (ta: Kind2, f: (a: A) => Kind3) => Kind3>; (F: Applicative3C): (ta: Kind2, f: (a: A) => Kind3) => Kind3>; (F: Applicative2): (ta: Kind2, f: (a: A) => Kind2) => Kind2>; (F: Applicative2C): (ta: Kind2, f: (a: A) => Kind2) => Kind2>; (F: Applicative1): (ta: Kind2, f: (a: A) => Kind) => Kind>; (F: Applicative): (ta: Kind2, f: (a: A) => HKT) => HKT>; } /** * @since 2.0.0 */ export interface Traverse3 { (F: Applicative4): (ta: Kind3, f: (a: A) => Kind4) => Kind4>; (F: Applicative3): (ta: Kind3, f: (a: A) => Kind3) => Kind3>; (F: Applicative3C): (ta: Kind3, f: (a: A) => Kind3) => Kind3>; (F: Applicative2): (ta: Kind3, f: (a: A) => Kind2) => Kind2>; (F: Applicative2C): (ta: Kind3, f: (a: A) => Kind2) => Kind2>; (F: Applicative1): (ta: Kind3, f: (a: A) => Kind) => Kind>; (F: Applicative): (ta: Kind3, f: (a: A) => HKT) => HKT>; } /** * @since 2.0.0 */ export interface Sequence { (F: Applicative4): (ta: HKT>) => Kind4>; (F: Applicative3): (ta: HKT>) => Kind3>; (F: Applicative3C): (ta: HKT>) => Kind3>; (F: Applicative2): (ta: HKT>) => Kind2>; (F: Applicative2C): (ta: HKT>) => Kind2>; (F: Applicative1): (ta: HKT>) => Kind>; (F: Applicative): (ta: HKT>) => HKT>; } /** * @since 2.0.0 */ export interface Sequence1 { (F: Applicative4): (ta: Kind>) => Kind4>; (F: Applicative3): (ta: Kind>) => Kind3>; (F: Applicative3C): (ta: Kind>) => Kind3>; (F: Applicative2): (ta: Kind>) => Kind2>; (F: Applicative2C): (ta: Kind>) => Kind2>; (F: Applicative1): (ta: Kind>) => Kind>; (F: Applicative): (ta: Kind>) => HKT>; } /** * @since 2.0.0 */ export interface Sequence2 { (F: Applicative4): (ta: Kind2>) => Kind4>; (F: Applicative3): (ta: Kind2>) => Kind3>; (F: Applicative3C): (ta: Kind2>) => Kind3>; (F: Applicative2): (ta: Kind2>) => Kind2>; (F: Applicative2C): (ta: Kind2>) => Kind2>; (F: Applicative1): (ta: Kind2>) => Kind>; (F: Applicative): (ta: Kind2>) => HKT>; } /** * @since 2.0.0 */ export interface Sequence2C { (F: Applicative4): (ta: Kind2>) => Kind4>; (F: Applicative3): (ta: Kind2>) => Kind3>; (F: Applicative3C): (ta: Kind2>) => Kind3>; (F: Applicative2): (ta: Kind2>) => Kind2>; (F: Applicative2C): (ta: Kind2>) => Kind2>; (F: Applicative1): (ta: Kind2>) => Kind>; (F: Applicative): (ta: Kind2>) => HKT>; } /** * @since 2.0.0 */ export interface Sequence3 { (F: Applicative4): (ta: Kind3>) => Kind4>; (F: Applicative3): (ta: Kind3>) => Kind3>; (F: Applicative3C): (ta: Kind3>) => Kind3>; (F: Applicative2): (ta: Kind3>) => Kind2>; (F: Applicative2C): (ta: Kind3>) => Kind2>; (F: Applicative1): (ta: Kind3>) => Kind>; (F: Applicative): (ta: Kind3>) => HKT>; } /** * `traverse` composition. * * @since 2.10.0 */ export declare function traverse(T: Traversable1, G: Traversable2): { (F: Applicative4): (f: (a: A) => Kind4) => (tga: Kind>) => Kind4>>; (F: Applicative3): (f: (a: A) => Kind3) => (tga: Kind>) => Kind3>>; (F: Applicative3C): (f: (a: A) => Kind3) => (tga: Kind>) => Kind3>>; (F: Applicative2): (f: (a: A) => Kind2) => (tga: Kind>) => Kind2>>; (F: Applicative2C): (f: (a: A) => Kind2) => (tga: Kind>) => Kind2>>; (F: Applicative1): (f: (a: A) => Kind) => (tga: Kind>) => Kind>>; (F: Applicative): (f: (a: A) => HKT) => (tga: Kind>) => HKT>>; }; export declare function traverse(T: Traversable1, G: Traversable1): { (F: Applicative4): (f: (a: A) => Kind4) => (tga: Kind>) => Kind4>>; (F: Applicative3): (f: (a: A) => Kind3) => (tga: Kind>) => Kind3>>; (F: Applicative3C): (f: (a: A) => Kind3) => (tga: Kind>) => Kind3>>; (F: Applicative2): (f: (a: A) => Kind2) => (tga: Kind>) => Kind2>>; (F: Applicative2C): (f: (a: A) => Kind2) => (tga: Kind>) => Kind2>>; (F: Applicative1): (f: (a: A) => Kind) => (tga: Kind>) => Kind>>; (F: Applicative): (f: (a: A) => HKT) => (tga: Kind>) => HKT>>; }; export declare function traverse(T: Traversable, G: Traversable): (F: Applicative) => (f: (a: A) => HKT) => (tga: HKT>) => HKT>>; /** * `sequence` composition. * * @since 2.10.0 */ export declare function sequence(T: Traversable1, G: Traversable2): { (F: Applicative4): (tgfa: Kind>>) => Kind4>>; (F: Applicative3): (tgfa: Kind>>) => Kind3>>; (F: Applicative3C): (tgfa: Kind>>) => Kind3>>; (F: Applicative2): (tgfa: Kind>>) => Kind2>>; (F: Applicative2C): (tgfa: Kind>>) => Kind2>>; (F: Applicative1): (tgfa: Kind>>) => Kind>>; (F: Applicative): (tgfa: HKT>>) => HKT>>; }; export declare function sequence(T: Traversable1, G: Traversable1): { (F: Applicative4): (tgfa: Kind>>) => Kind4>>; (F: Applicative3): (tgfa: Kind>>) => Kind3>>; (F: Applicative3C): (tgfa: Kind>>) => Kind3>>; (F: Applicative2): (tgfa: Kind>>) => Kind2>>; (F: Applicative2C): (tgfa: Kind>>) => Kind2>>; (F: Applicative1): (tgfa: Kind>>) => Kind>>; (F: Applicative): (tgfa: HKT>>) => HKT>>; }; export declare function sequence(T: Traversable, G: Traversable): (F: Applicative) => (tgfa: HKT>>) => HKT>>; /** * @since 2.6.3 */ export interface PipeableTraverse1 { (F: Applicative3): (f: (a: A) => Kind3) => (ta: Kind) => Kind3>; (F: Applicative3C): (f: (a: A) => Kind3) => (ta: Kind) => Kind3>; (F: Applicative2): (f: (a: A) => Kind2) => (ta: Kind) => Kind2>; (F: Applicative2C): (f: (a: A) => Kind2) => (ta: Kind) => Kind2>; (F: Applicative1): (f: (a: A) => Kind) => (ta: Kind) => Kind>; (F: Applicative): (f: (a: A) => HKT) => (ta: Kind) => HKT>; } /** * @since 2.6.3 */ export interface PipeableTraverse2 { (F: Applicative3): (f: (a: A) => Kind3) => (ta: Kind2) => Kind3>; (F: Applicative2): (f: (a: A) => Kind2) => (ta: Kind2) => Kind2>; (F: Applicative2C): (f: (a: A) => Kind2) => (ta: Kind2) => Kind2>; (F: Applicative1): (f: (a: A) => Kind) => (ta: Kind2) => Kind>; (F: Applicative): (f: (a: A) => HKT) => (ta: Kind2) => HKT>; } /** * @category zone of death * @since 2.0.0 * @deprecated */ export interface TraversableComposition extends FoldableComposition, FunctorComposition { readonly traverse: (H: Applicative) => (fga: HKT>, f: (a: A) => HKT) => HKT>>; readonly sequence: (H: Applicative) => (fga: HKT>>) => HKT>>; } /** * @category zone of death * @since 2.0.0 * @deprecated */ export interface TraverseComposition11 { (H: Applicative3): (fga: Kind>, f: (a: A) => Kind3) => Kind3>>; (H: Applicative2): (fga: Kind>, f: (a: A) => Kind2) => Kind2>>; (H: Applicative2C): (fga: Kind>, f: (a: A) => Kind2) => Kind2>>; (H: Applicative1): (fga: Kind>, f: (a: A) => Kind) => Kind>>; (H: Applicative): (fga: Kind>, f: (a: A) => HKT) => HKT>>; } /** * @category zone of death * @since 2.0.0 * @deprecated */ export interface SequenceComposition11 { (H: Applicative3): (fga: Kind>>) => Kind3>>; (H: Applicative2): (fga: Kind>>) => Kind2>>; (H: Applicative2C): (fga: Kind>>) => Kind2>>; (H: Applicative1): (fga: Kind>>) => Kind>>; (H: Applicative): (fga: Kind>>) => HKT>>; } /** * @category zone of death * @since 2.0.0 * @deprecated */ export interface TraversableComposition11 extends FoldableComposition11, FunctorComposition11 { readonly traverse: TraverseComposition11; readonly sequence: SequenceComposition11; } /** * Use * - [`traverse`](#traverse) * - [`sequence`](#sequence) * * instead. * * @category zone of death * @since 2.0.0 * @deprecated */ export declare function getTraversableComposition(F: Traversable1, G: Traversable1): TraversableComposition11; /** @deprecated */ export declare function getTraversableComposition(F: Traversable, G: Traversable): TraversableComposition;