/** * @since 2.0.0 */ import { Applicative2 } from './Applicative' import { Category2 } from './Category' import { Choice2 } from './Choice' import { Functor2 } from './Functor' import { Monad2 } from './Monad' import { Monoid } from './Monoid' import { Profunctor2 } from './Profunctor' import { Semigroup } from './Semigroup' import { Strong2 } from './Strong' /** * @category model * @since 2.0.0 */ export interface Reader { (r: R): A } /** * Reads the current context * * @category constructors * @since 2.0.0 */ export declare const ask: () => Reader /** * Projects a value from the global context in a Reader * * @category constructors * @since 2.0.0 */ export declare const asks: (f: (r: R) => A) => Reader /** * Changes the value of the local context during the execution of the action `ma` (similar to `Contravariant`'s * `contramap`). * * @category combinators * @since 2.0.0 */ export declare const local: (f: (d: Q) => R) => (ma: Reader) => Reader /** * `map` can be used to turn functions `(a: A) => B` into functions `(fa: F) => F` whose argument and return types * use the type constructor `F` to represent some computational context. * * @category Functor * @since 2.0.0 */ export declare const map: (f: (a: A) => B) => (fa: Reader) => Reader /** * Less strict version of [`ap`](#ap). * * @category Apply * @since 2.8.0 */ export declare const apW: (fa: Reader) => (fab: Reader B>) => Reader /** * Apply a function to an argument under a type constructor. * * @category Apply * @since 2.0.0 */ export declare const ap: (fa: Reader) => (fab: Reader B>) => Reader /** * Combine two effectful actions, keeping only the result of the first. * * Derivable from `Apply`. * * @category combinators * @since 2.0.0 */ export declare const apFirst: (fb: Reader) => (fa: Reader) => Reader /** * Combine two effectful actions, keeping only the result of the second. * * Derivable from `Apply`. * * @category combinators * @since 2.0.0 */ export declare const apSecond: (fb: Reader) => (fa: Reader) => Reader /** * Wrap a value into the type constructor. * * @category Applicative * @since 2.0.0 */ export declare const of: Applicative2['of'] /** * Less strict version of [`chain`](#chain). * * @category Monad * @since 2.6.0 */ export declare const chainW: (f: (a: A) => Reader) => (ma: Reader) => Reader /** * Composes computations in sequence, using the return value of one computation to determine the next computation. * * @category Monad * @since 2.0.0 */ export declare const chain: (f: (a: A) => Reader) => (ma: Reader) => Reader /** * Composes computations in sequence, using the return value of one computation to determine the next computation and * keeping only the result of the first. * * Derivable from `Monad`. * * @category combinators * @since 2.0.0 */ export declare const chainFirst: (f: (a: A) => Reader) => (ma: Reader) => Reader /** * Derivable from `Monad`. * * @category combinators * @since 2.0.0 */ export declare const flatten: (mma: Reader>) => Reader /** * @category Semigroupoid * @since 2.0.0 */ export declare const compose: (ab: Reader) => (bc: Reader) => Reader /** * @category Profunctor * @since 2.0.0 */ export declare const promap: (f: (d: D) => E, g: (a: A) => B) => (fbc: Reader) => Reader /** * @category Category * @since 2.0.0 */ export declare const id: Category2['id'] /** * @category instances * @since 2.0.0 */ export declare const URI = 'Reader' /** * @category instances * @since 2.0.0 */ export declare type URI = typeof URI declare module './HKT' { interface URItoKind2 { readonly [URI]: Reader } } /** * @category instances * @since 2.0.0 */ export declare function getSemigroup(S: Semigroup): Semigroup> /** * @category instances * @since 2.0.0 */ export declare function getMonoid(M: Monoid): Monoid> /** * @category instances * @since 2.7.0 */ export declare const Functor: Functor2 /** * @category instances * @since 2.7.0 */ export declare const Applicative: Applicative2 /** * @category instances * @since 2.7.0 */ export declare const Monad: Monad2 /** * @category instances * @since 2.7.0 */ export declare const Profunctor: Profunctor2 /** * @category instances * @since 2.7.0 */ export declare const Category: Category2 /** * @category instances * @since 2.8.3 */ export declare const Strong: Strong2 /** * @category instances * @since 2.8.3 */ export declare const Choice: Choice2 /** * @category instances * @since 2.0.0 */ export declare const reader: Monad2 & Profunctor2 & Category2 & Strong2 & Choice2 /** * @since 2.8.0 */ export declare const bindTo: (name: N) => (fa: Reader) => Reader /** * @since 2.8.0 */ export declare const bindW: ( name: Exclude, f: (a: A) => Reader ) => (fa: Reader) => Reader /** * @since 2.8.0 */ export declare const bind: ( name: Exclude, f: (a: A) => Reader ) => ( fa: Reader ) => Reader< R, { [K in keyof A | N]: K extends keyof A ? A[K] : B } > /** * @since 2.9.0 */ export declare const Do: Reader /** * @since 2.8.0 */ export declare const apSW: ( name: Exclude, fb: Reader ) => (fa: Reader) => Reader /** * @since 2.8.0 */ export declare const apS: ( name: Exclude, fb: Reader ) => ( fa: Reader ) => Reader< R, { [K in keyof A | N]: K extends keyof A ? A[K] : B } > /** * * @since 2.9.0 */ export declare const traverseArrayWithIndex: ( f: (index: number, a: A) => Reader ) => (arr: ReadonlyArray) => Reader> /** * this function have the same behavior of `A.traverse(R.reader)` but it's stack safe and optimized * * @example * import * as RA from 'fp-ts/ReadonlyArray' * import { traverseArray, Reader } from 'fp-ts/Reader' * import { pipe } from 'fp-ts/function' * * const add: (x: number) => Reader<{value:number}, number> = x => config => x + config.value * const arr = RA.range(0, 100) * * assert.deepStrictEqual(pipe(arr, traverseArray(add))({value: 3}), pipe(arr, RA.map(x => x + 3))) * * @since 2.9.0 */ export declare const traverseArray: ( f: (a: A) => Reader ) => (arr: ReadonlyArray) => Reader> /** * this function have the same behavior of `A.sequence(R.reader)` but it's stack safe and optimized * * @example * import * as RA from 'fp-ts/ReadonlyArray' * import { sequenceArray, Reader } from 'fp-ts/Reader' * import { pipe } from 'fp-ts/function' * * const add: (x: number) => Reader<{value:number}, number> = x => config => x + config.value * const arr = RA.range(0, 100) * * assert.deepStrictEqual(pipe(arr, RA.map(add), sequenceArray)({value: 3}), pipe(arr, RA.map(x => x + 3))) * * @since 2.9.0 */ export declare const sequenceArray: (arr: ReadonlyArray>) => Reader>