/** * @since 2.0.0 */ import { Applicative, Applicative1, Applicative2, Applicative2C, Applicative3 } from './Applicative' import { HKT, Kind, Kind2, Kind3, URIS, URIS2, URIS3, URIS4, Kind4 } from './HKT' import { Monad, Monad1, Monad2, Monad2C, Monad3, Monad3C } from './Monad' import { Monoid } from './Monoid' /** * @category type classes * @since 2.0.0 */ export interface Foldable { readonly URI: F readonly reduce: (fa: HKT, b: B, f: (b: B, a: A) => B) => B readonly foldMap: (M: Monoid) => (fa: HKT, f: (a: A) => M) => M readonly reduceRight: (fa: HKT, b: B, f: (a: A, b: B) => B) => B } /** * @category type classes * @since 2.0.0 */ export interface Foldable1 { readonly URI: F readonly reduce: (fa: Kind, b: B, f: (b: B, a: A) => B) => B readonly foldMap: (M: Monoid) => (fa: Kind, f: (a: A) => M) => M readonly reduceRight: (fa: Kind, b: B, f: (a: A, b: B) => B) => B } /** * @category type classes * @since 2.0.0 */ export interface Foldable2 { readonly URI: F readonly reduce: (fa: Kind2, b: B, f: (b: B, a: A) => B) => B readonly foldMap: (M: Monoid) => (fa: Kind2, f: (a: A) => M) => M readonly reduceRight: (fa: Kind2, b: B, f: (a: A, b: B) => B) => B } /** * @category type classes * @since 2.0.0 */ export interface Foldable2C { readonly URI: F readonly _E: E readonly reduce: (fa: Kind2, b: B, f: (b: B, a: A) => B) => B readonly foldMap: (M: Monoid) => (fa: Kind2, f: (a: A) => M) => M readonly reduceRight: (fa: Kind2, b: B, f: (a: A, b: B) => B) => B } /** * @category type classes * @since 2.0.0 */ export interface Foldable3 { readonly URI: F readonly reduce: (fa: Kind3, b: B, f: (b: B, a: A) => B) => B readonly foldMap: (M: Monoid) => (fa: Kind3, f: (a: A) => M) => M readonly reduceRight: (fa: Kind3, b: B, f: (a: A, b: B) => B) => B } /** * @category type classes * @since 2.2.0 */ export interface Foldable3C { readonly URI: F readonly _E: E readonly reduce: (fa: Kind3, b: B, f: (b: B, a: A) => B) => B readonly foldMap: (M: Monoid) => (fa: Kind3, f: (a: A) => M) => M readonly reduceRight: (fa: Kind3, b: B, f: (a: A, b: B) => B) => B } /** * @category type classes * @since 2.0.0 */ export interface Foldable4 { readonly URI: F readonly reduce: (fa: Kind4, b: B, f: (b: B, a: A) => B) => B readonly foldMap: (M: Monoid) => (fa: Kind4, f: (a: A) => M) => M readonly reduceRight: (fa: Kind4, b: B, f: (a: A, b: B) => B) => B } /** * @since 2.0.0 */ export interface FoldableComposition { readonly reduce: (fga: HKT>, b: B, f: (b: B, a: A) => B) => B readonly foldMap: (M: Monoid) => (fa: HKT>, f: (a: A) => M) => M readonly reduceRight: (fa: HKT>, b: B, f: (a: A, b: B) => B) => B } /** * @since 2.0.0 */ export interface FoldableComposition11 { readonly reduce: (fga: Kind>, b: B, f: (b: B, a: A) => B) => B readonly foldMap: (M: Monoid) => (fa: Kind>, f: (a: A) => M) => M readonly reduceRight: (fa: Kind>, b: B, f: (a: A, b: B) => B) => B } /** * @since 2.0.0 */ export interface FoldableComposition12 { readonly reduce: (fga: Kind>, b: B, f: (b: B, a: A) => B) => B readonly foldMap: (M: Monoid) => (fa: Kind>, f: (a: A) => M) => M readonly reduceRight: (fa: Kind>, b: B, f: (a: A, b: B) => B) => B } /** * @since 2.0.0 */ export interface FoldableComposition12C { readonly reduce: (fga: Kind>, b: B, f: (b: B, a: A) => B) => B readonly foldMap: (M: Monoid) => (fa: Kind>, f: (a: A) => M) => M readonly reduceRight: (fa: Kind>, b: B, f: (a: A, b: B) => B) => B } /** * @since 2.0.0 */ export interface FoldableComposition21 { readonly reduce: (fga: Kind2>, b: B, f: (b: B, a: A) => B) => B readonly foldMap: (M: Monoid) => (fa: Kind2>, f: (a: A) => M) => M readonly reduceRight: (fa: Kind2>, b: B, f: (a: A, b: B) => B) => B } /** * @since 2.0.0 */ export interface FoldableComposition2C1 { readonly reduce: (fga: Kind2>, b: B, f: (b: B, a: A) => B) => B readonly foldMap: (M: Monoid) => (fa: Kind2>, f: (a: A) => M) => M readonly reduceRight: (fa: Kind2>, b: B, f: (a: A, b: B) => B) => B } /** * @since 2.0.0 */ export interface FoldableComposition22 { readonly reduce: (fga: Kind2>, b: B, f: (b: B, a: A) => B) => B readonly foldMap: (M: Monoid) => (fa: Kind2>, f: (a: A) => M) => M readonly reduceRight: (fa: Kind2>, b: B, f: (a: A, b: B) => B) => B } /** * @since 2.0.0 */ export interface FoldableComposition22C { readonly reduce: (fga: Kind2>, b: B, f: (b: B, a: A) => B) => B readonly foldMap: (M: Monoid) => (fa: Kind2>, f: (a: A) => M) => M readonly reduceRight: (fa: Kind2>, b: B, f: (a: A, b: B) => B) => B } /** * Returns the composition of two foldables * * @example * import { getFoldableComposition } from 'fp-ts/Foldable' * import { array } from 'fp-ts/Array' * import { option, some, none } from 'fp-ts/Option' * import { monoidString } from 'fp-ts/Monoid' * * const F = getFoldableComposition(array, option) * assert.strictEqual(F.reduce([some('a'), some('b'), some('c')], '', monoidString.concat), 'abc') * assert.strictEqual(F.reduce([some('a'), none, some('c')], '', monoidString.concat), 'ac') * * @since 2.0.0 */ export declare function getFoldableComposition( F: Foldable2, G: Foldable2C ): FoldableComposition22C export declare function getFoldableComposition( F: Foldable2, G: Foldable2 ): FoldableComposition22 export declare function getFoldableComposition( F: Foldable2C, G: Foldable1 ): FoldableComposition2C1 export declare function getFoldableComposition( F: Foldable2, G: Foldable1 ): FoldableComposition21 export declare function getFoldableComposition( F: Foldable1, G: Foldable2C ): FoldableComposition12C export declare function getFoldableComposition( F: Foldable1, G: Foldable2 ): FoldableComposition12 export declare function getFoldableComposition( F: Foldable1, G: Foldable1 ): FoldableComposition11 export declare function getFoldableComposition(F: Foldable, G: Foldable): FoldableComposition /** * Use `reduceM` instead * * @since 2.0.0 * @deprecated */ export declare function foldM( M: Monad3, F: Foldable1 ): (fa: Kind, b: B, f: (b: B, a: A) => Kind3) => Kind3 /** @deprecated */ export declare function foldM( M: Monad3C, F: Foldable1 ): (fa: Kind, b: B, f: (b: B, a: A) => Kind3) => Kind3 /** @deprecated */ export declare function foldM( M: Monad2, F: Foldable1 ): (fa: Kind, b: B, f: (b: B, a: A) => Kind2) => Kind2 /** @deprecated */ export declare function foldM( M: Monad2C, F: Foldable1 ): (fa: Kind, b: B, f: (b: B, a: A) => Kind2) => Kind2 /** @deprecated */ export declare function foldM( M: Monad1, F: Foldable1 ): (fa: Kind, b: B, f: (b: B, a: A) => Kind) => Kind /** @deprecated */ export declare function foldM( M: Monad, F: Foldable ): (fa: HKT, b: B, f: (b: B, a: A) => HKT) => HKT /** * Similar to 'reduce', but the result is encapsulated in a monad. * * Note: this function is not generally stack-safe, e.g., for monads which build up thunks a la `IO`. * * @example * import { reduceM } from 'fp-ts/Foldable' * import { Monad, some } from 'fp-ts/Option' * import { make, Foldable } from 'fp-ts/Tree' * import { pipe } from 'fp-ts/function' * * const t = make(1, [make(2, []), make(3, []), make(4, [])]) * assert.deepStrictEqual(pipe(t, reduceM(Monad, Foldable)(0, (b, a) => (a > 2 ? some(b + a) : some(b)))), some(7)) * * @since 2.8.0 */ export declare function reduceM( M: Monad3, F: Foldable1 ): (b: B, f: (b: B, a: A) => Kind3) => (fa: Kind) => Kind3 export declare function reduceM( M: Monad3C, F: Foldable1 ): (b: B, f: (b: B, a: A) => Kind3) => (fa: Kind) => Kind3 export declare function reduceM( M: Monad2, F: Foldable1 ): (b: B, f: (b: B, a: A) => Kind2) => (fa: Kind) => Kind2 export declare function reduceM( M: Monad2C, F: Foldable1 ): (b: B, f: (b: B, a: A) => Kind2) => (fa: Kind) => Kind2 export declare function reduceM( M: Monad1, F: Foldable1 ): (b: B, f: (b: B, a: A) => Kind) => (fa: Kind) => Kind export declare function reduceM( M: Monad, F: Foldable ): (b: B, f: (b: B, a: A) => HKT) => (fa: HKT) => HKT /** * Fold a data structure, accumulating values in some `Monoid`, combining adjacent elements using the specified separator * * @example * import { intercalate } from 'fp-ts/Foldable' * import { monoidString } from 'fp-ts/Monoid' * import { make, tree } from 'fp-ts/Tree' * * const t = make('a', [make('b', []), make('c', []), make('d', [])]) * assert.strictEqual(intercalate(monoidString, tree)('|', t), 'a|b|c|d') * * @since 2.0.0 */ export declare function intercalate( M: Monoid, F: Foldable3 ): (sep: M, fm: Kind3) => M export declare function intercalate( M: Monoid, F: Foldable2 ): (sep: M, fm: Kind2) => M export declare function intercalate( M: Monoid, F: Foldable2C ): (sep: M, fm: Kind2) => M export declare function intercalate(M: Monoid, F: Foldable1): (sep: M, fm: Kind) => M export declare function intercalate(M: Monoid, F: Foldable): (sep: M, fm: HKT) => M /** * Transforms a `Foldable` into a read-only array. * * @example * import { toArray } from 'fp-ts/Foldable' * import { tree, make } from 'fp-ts/Tree' * * const t = make(1, [make(2, []), make(3, []), make(4, [])]) * assert.deepStrictEqual(toArray(tree)(t), [1, 2, 3, 4]) * * @since 2.8.0 */ export declare function toArray( F: Foldable4 ): (fa: Kind4) => ReadonlyArray export declare function toArray(F: Foldable3): (fa: Kind3) => ReadonlyArray export declare function toArray( F: Foldable3C ): (fa: Kind3) => ReadonlyArray export declare function toArray(F: Foldable2): (fa: Kind2) => ReadonlyArray export declare function toArray(F: Foldable2C): (fa: Kind2) => ReadonlyArray export declare function toArray(F: Foldable1): (fa: Kind) => ReadonlyArray export declare function toArray(F: Foldable): (fa: HKT) => ReadonlyArray /** * Traverse a data structure, performing some effects encoded by an `Applicative` functor at each value, ignoring the * final result. * * @example * import { array } from 'fp-ts/Array' * import { traverse_ } from 'fp-ts/Foldable' * import { io } from 'fp-ts/IO' * * let log = '' * const append = (s: string) => () => (log += s) * traverse_(io, array)(['a', 'b', 'c'], append)() * assert.strictEqual(log, 'abc') * * @since 2.0.0 */ export declare function traverse_( M: Applicative3, F: Foldable1 ): (fa: Kind, f: (a: A) => Kind3) => Kind3 export declare function traverse_( M: Applicative2, F: Foldable1 ): (fa: Kind, f: (a: A) => Kind2) => Kind2 export declare function traverse_( M: Applicative2C, F: Foldable1 ): (fa: Kind, f: (a: A) => Kind2) => Kind2 export declare function traverse_( M: Applicative1, F: Foldable1 ): (fa: Kind, f: (a: A) => Kind) => Kind export declare function traverse_( M: Applicative, F: Foldable ): (fa: HKT, f: (a: A) => HKT) => HKT