/** * Utility functions to accommodate `fp-ts/Monad`. * * @since 0.15.0 */ import type { Kind, Kind2, Kind3, Kind4, URIS, URIS2, URIS3, URIS4 } from "fp-ts/HKT"; import type { Monad1, Monad2, Monad2C, Monad3, Monad3C, Monad4 } from "fp-ts/Monad"; import type { Predicate } from "fp-ts/Predicate"; /** * Monadic if/then/else. Only executes the relevant action. * * @example * import { ifM } from 'fp-ts-std/Monad' * import * as IO from 'fp-ts/IO' * import { execute } from 'fp-ts-std/IO' * * const f = * ifM(IO.Monad)(IO.of(true)) * (IO.of('foo'))(IO.of('bar')) * * assert.strictEqual(execute(f), 'foo') * * @category 2 Typeclass Methods * @since 0.15.0 */ export declare function ifM(M: Monad4): (p: Kind4) => (x: Kind4) => (y: Kind4) => Kind4; export declare function ifM(M: Monad3): (p: Kind3) => (x: Kind3) => (y: Kind3) => Kind3; export declare function ifM(M: Monad3C): (p: Kind3) => (x: Kind3) => (y: Kind3) => Kind3; export declare function ifM(M: Monad2): (p: Kind2) => (x: Kind2) => (y: Kind2) => Kind2; export declare function ifM(M: Monad2C): (p: Kind2) => (x: Kind2) => (y: Kind2) => Kind2; export declare function ifM(M: Monad1): (p: Kind) => (x: Kind) => (y: Kind) => Kind; /** * Monadic &&. Short-circuits. * * @example * import { andM } from 'fp-ts-std/Monad' * import * as IO from 'fp-ts/IO' * import { execute } from 'fp-ts-std/IO' * * const f = andM(IO.Monad)(IO.of(true)) * * assert.strictEqual(execute(f(IO.of(true))), true) * assert.strictEqual(execute(f(IO.of(false))), false) * * @category 2 Typeclass Methods * @since 0.15.0 */ export declare function andM(M: Monad4): (x: Kind4) => (y: Kind4) => Kind4; export declare function andM(M: Monad3): (x: Kind3) => (y: Kind3) => Kind3; export declare function andM(M: Monad3C): (x: Kind3) => (y: Kind3) => Kind3; export declare function andM(M: Monad2): (x: Kind2) => (y: Kind2) => Kind2; export declare function andM(M: Monad2C): (x: Kind2) => (y: Kind2) => Kind2; export declare function andM(M: Monad1): (x: Kind) => (y: Kind) => Kind; /** * Monadic ||. Short-circuits. * * @example * import { orM } from 'fp-ts-std/Monad' * import * as IO from 'fp-ts/IO' * import { execute } from 'fp-ts-std/IO' * * const f = orM(IO.Monad)(IO.of(false)) * * assert.strictEqual(execute(f(IO.of(true))), true) * assert.strictEqual(execute(f(IO.of(false))), false) * * @category 2 Typeclass Methods * @since 0.15.0 */ export declare function orM(M: Monad4): (x: Kind4) => (y: Kind4) => Kind4; export declare function orM(M: Monad3): (x: Kind3) => (y: Kind3) => Kind3; export declare function orM(M: Monad3C): (x: Kind3) => (y: Kind3) => Kind3; export declare function orM(M: Monad2): (x: Kind2) => (y: Kind2) => Kind2; export declare function orM(M: Monad2C): (x: Kind2) => (y: Kind2) => Kind2; export declare function orM(M: Monad1): (x: Kind) => (y: Kind) => Kind; /** * Monadic `allPass`. Short-circuits. * * @example * import { constant } from 'fp-ts/function' * import { allPassM } from 'fp-ts-std/Monad' * import * as IO from 'fp-ts/IO' * import { execute } from 'fp-ts-std/IO' * * const f = allPassM(IO.Monad) * * assert.strictEqual(execute(f([constant(IO.of(true)), constant(IO.of(true))])('foo')), true) * assert.strictEqual(execute(f([constant(IO.of(true)), constant(IO.of(false))])('foo')), false) * * @category 2 Typeclass Methods * @since 0.15.0 */ export declare function allPassM(M: Monad4): (f: Array<(x: A) => Kind4>) => (x: A) => Kind4; export declare function allPassM(M: Monad3): (f: Array<(x: A) => Kind3>) => (x: A) => Kind3; export declare function allPassM(M: Monad3C): (f: Array<(x: A) => Kind3>) => (x: A) => Kind3; export declare function allPassM(M: Monad2): (f: Array<(x: A) => Kind2>) => (x: A) => Kind2; export declare function allPassM(M: Monad2C): (f: Array<(x: A) => Kind2>) => (x: A) => Kind2; export declare function allPassM(M: Monad1): (f: Array<(x: A) => Kind>) => (x: A) => Kind; /** * Monadic `anyPass`. Short-circuits. * * @example * import { constant } from 'fp-ts/function' * import { anyPassM } from 'fp-ts-std/Monad' * import * as IO from 'fp-ts/IO' * import { execute } from 'fp-ts-std/IO' * * const f = anyPassM(IO.Monad) * * assert.strictEqual(execute(f([constant(IO.of(true)), constant(IO.of(false))])('foo')), true) * assert.strictEqual(execute(f([constant(IO.of(false)), constant(IO.of(false))])('foo')), false) * * @category 2 Typeclass Methods * @since 0.15.0 */ export declare function anyPassM(M: Monad4): (f: Array<(x: A) => Kind4>) => (x: A) => Kind4; export declare function anyPassM(M: Monad3): (f: Array<(x: A) => Kind3>) => (x: A) => Kind3; export declare function anyPassM(M: Monad3C): (f: Array<(x: A) => Kind3>) => (x: A) => Kind3; export declare function anyPassM(M: Monad2): (f: Array<(x: A) => Kind2>) => (x: A) => Kind2; export declare function anyPassM(M: Monad2C): (f: Array<(x: A) => Kind2>) => (x: A) => Kind2; export declare function anyPassM(M: Monad1): (f: Array<(x: A) => Kind>) => (x: A) => Kind; /** * Monadic `nonePass`. Short-circuits. * * @example * import { constant } from 'fp-ts/function' * import { nonePassM } from 'fp-ts-std/Monad' * import * as IO from 'fp-ts/IO' * import { execute } from 'fp-ts-std/IO' * * const f = nonePassM(IO.Monad) * * assert.strictEqual(execute(f([constant(IO.of(false)), constant(IO.of(false))])('foo')), true) * assert.strictEqual(execute(f([constant(IO.of(false)), constant(IO.of(true))])('foo')), false) * * @category 2 Typeclass Methods * @since 0.15.0 */ export declare function nonePassM(M: Monad4): (f: Array<(x: A) => Kind4>) => (x: A) => Kind4; export declare function nonePassM(M: Monad3): (f: Array<(x: A) => Kind3>) => (x: A) => Kind3; export declare function nonePassM(M: Monad3C): (f: Array<(x: A) => Kind3>) => (x: A) => Kind3; export declare function nonePassM(M: Monad2): (f: Array<(x: A) => Kind2>) => (x: A) => Kind2; export declare function nonePassM(M: Monad2C): (f: Array<(x: A) => Kind2>) => (x: A) => Kind2; export declare function nonePassM(M: Monad1): (f: Array<(x: A) => Kind>) => (x: A) => Kind; /** * Like applicative `when`, but the condition is monadic. * * @example * import { pipe } from 'fp-ts/function' * import { whenM } from 'fp-ts-std/Monad' * import * as IO from 'fp-ts/IO' * import * as IOE from 'fp-ts/IOEither' * import { log } from 'fp-ts/Console' * * const isInvalid = (n: number): IO.IO => () => Date.now() !== 42 * * pipe( * IOE.of(123), * IOE.chainFirstIOK(n => * whenM(IO.Monad)(isInvalid(n))(log(n))), * ) * * @category 2 Typeclass Methods * @since 0.16.0 */ export declare function whenM(M: Monad4): (b: Kind4) => (x: Kind4) => Kind4; export declare function whenM(M: Monad3): (b: Kind3) => (x: Kind3) => Kind3; export declare function whenM(M: Monad3C): (b: Kind3) => (x: Kind3) => Kind3; export declare function whenM(M: Monad2): (b: Kind2) => (x: Kind2) => Kind2; export declare function whenM(M: Monad2C): (b: Kind2) => (x: Kind2) => Kind2; export declare function whenM(M: Monad1): (b: Kind) => (x: Kind) => Kind; /** * The reverse of `whenM`. * * @example * import { pipe } from 'fp-ts/function' * import { unlessM } from 'fp-ts-std/Monad' * import * as IO from 'fp-ts/IO' * import * as IOE from 'fp-ts/IOEither' * import { log } from 'fp-ts/Console' * * const isValid = (n: number): IO.IO => () => Date.now() === 42 * * pipe( * IOE.of(123), * IOE.chainFirstIOK(n => * unlessM(IO.Monad)(isValid(n))(log(n))), * ) * * @category 2 Typeclass Methods * @since 0.16.0 */ export declare function unlessM(M: Monad4): (b: Kind4) => (x: Kind4) => Kind4; export declare function unlessM(M: Monad3): (b: Kind3) => (x: Kind3) => Kind3; export declare function unlessM(M: Monad3C): (b: Kind3) => (x: Kind3) => Kind3; export declare function unlessM(M: Monad2): (b: Kind2) => (x: Kind2) => Kind2; export declare function unlessM(M: Monad2C): (b: Kind2) => (x: Kind2) => Kind2; export declare function unlessM(M: Monad1): (b: Kind) => (x: Kind) => Kind; /** * Repeatedly execute an action until the result satisfies the predicate. * * @example * import { until } from 'fp-ts-std/Monad' * import * as IO from 'fp-ts/IO' * import { execute } from 'fp-ts-std/IO' * import { Predicate } from 'fp-ts/Predicate' * import * as Rand from 'fp-ts/Random' * * const isValid: Predicate = n => n > 0.5 * * const genValid: IO.IO = until(IO.Monad)(isValid)(Rand.random) * * assert.strictEqual( * isValid(execute(genValid)), * true, * ) * * @category 2 Typeclass Methods * @since 0.18.0 */ export declare function until(M: Monad4): (p: Predicate) => (x: Kind4) => Kind4; export declare function until(M: Monad3): (p: Predicate) => (x: Kind3) => Kind3; export declare function until(M: Monad3C): (p: Predicate) => (x: Kind3) => Kind3; export declare function until(M: Monad2): (p: Predicate) => (x: Kind2) => Kind2; export declare function until(M: Monad2C): (p: Predicate) => (x: Kind2) => Kind2; export declare function until(M: Monad1): (p: Predicate) => (x: Kind) => Kind; //# sourceMappingURL=Monad.d.ts.map