/** * `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' import { Foldable, Foldable1, Foldable2, Foldable2C, Foldable3, FoldableComposition, FoldableComposition11 } from './Foldable' import { Functor, Functor1, Functor2, Functor2C, Functor3, FunctorComposition, FunctorComposition11 } from './Functor' import { HKT, Kind, Kind2, Kind3, Kind4, URIS, URIS2, URIS3, URIS4 } from './HKT' /** * @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