/** * @since 2.0.0 */ import { BooleanAlgebra } from './BooleanAlgebra.js'; import { Monoid } from './Monoid.js'; import { Ring } from './Ring.js'; import { Semigroup } from './Semigroup.js'; import { Semiring } from './Semiring.js'; /** * @category instances * @since 2.10.0 */ export declare const getBooleanAlgebra: (B: BooleanAlgebra) => () => BooleanAlgebra<(a: A) => B>; /** * Unary functions form a semigroup as long as you can provide a semigroup for the codomain. * * @example * import { Predicate, getSemigroup } from 'fp-ts/function' * import * as B from 'fp-ts/boolean' * * const f: Predicate = (n) => n <= 2 * const g: Predicate = (n) => n >= 0 * * const S1 = getSemigroup(B.SemigroupAll)() * * assert.deepStrictEqual(S1.concat(f, g)(1), true) * assert.deepStrictEqual(S1.concat(f, g)(3), false) * * const S2 = getSemigroup(B.SemigroupAny)() * * assert.deepStrictEqual(S2.concat(f, g)(1), true) * assert.deepStrictEqual(S2.concat(f, g)(3), true) * * @category instances * @since 2.10.0 */ export declare const getSemigroup: (S: Semigroup) => () => Semigroup<(a: A) => S>; /** * Unary functions form a monoid as long as you can provide a monoid for the codomain. * * @example * import { Predicate } from 'fp-ts/Predicate' * import { getMonoid } from 'fp-ts/function' * import * as B from 'fp-ts/boolean' * * const f: Predicate = (n) => n <= 2 * const g: Predicate = (n) => n >= 0 * * const M1 = getMonoid(B.MonoidAll)() * * assert.deepStrictEqual(M1.concat(f, g)(1), true) * assert.deepStrictEqual(M1.concat(f, g)(3), false) * * const M2 = getMonoid(B.MonoidAny)() * * assert.deepStrictEqual(M2.concat(f, g)(1), true) * assert.deepStrictEqual(M2.concat(f, g)(3), true) * * @category instances * @since 2.10.0 */ export declare const getMonoid: (M: Monoid) => (() => Monoid<(a: A) => M>); /** * @category instances * @since 2.10.0 */ export declare const getSemiring: (S: Semiring) => Semiring<(a: A) => B>; /** * @category instances * @since 2.10.0 */ export declare const getRing: (R: Ring) => Ring<(a: A) => B>; /** * @since 2.11.0 */ export declare const apply: (a: A) => (f: (a: A) => B) => B; /** * @example * import { FunctionN } from 'fp-ts/function' * * export const sum: FunctionN<[number, number], number> = (a, b) => a + b * * @since 2.0.0 */ export interface FunctionN, B> { (...args: A): B; } /** * @since 2.0.0 */ export declare function identity(a: A): A; /** * @since 2.0.0 */ export declare const unsafeCoerce: (a: A) => B; /** * @since 2.0.0 */ export declare function constant(a: A): LazyArg; /** * A thunk that returns always `true`. * * @since 2.0.0 */ export declare const constTrue: LazyArg; /** * A thunk that returns always `false`. * * @since 2.0.0 */ export declare const constFalse: LazyArg; /** * A thunk that returns always `null`. * * @since 2.0.0 */ export declare const constNull: LazyArg; /** * A thunk that returns always `undefined`. * * @since 2.0.0 */ export declare const constUndefined: LazyArg; /** * A thunk that returns always `void`. * * @since 2.0.0 */ export declare const constVoid: LazyArg; /** * Flips the arguments of a curried function. * * @example * import { flip } from 'fp-ts/function' * * const f = (a: number) => (b: string) => a - b.length * * assert.strictEqual(flip(f)('aaa')(2), -1) * * @since 2.0.0 */ export declare function flip(f: (a: A) => (b: B) => C): (b: B) => (a: A) => C; /** @deprecated */ export declare function flip(f: (a: A, b: B) => C): (b: B, a: A) => C; /** * Performs left-to-right function composition. The first argument may have any arity, the remaining arguments must be unary. * * See also [`pipe`](#pipe). * * @example * import { flow } from 'fp-ts/function' * * const len = (s: string): number => s.length * const double = (n: number): number => n * 2 * * const f = flow(len, double) * * assert.strictEqual(f('aaa'), 6) * * @since 2.0.0 */ export declare function flow, B>(ab: (...a: A) => B): (...a: A) => B; export declare function flow, B, C>(ab: (...a: A) => B, bc: (b: B) => C): (...a: A) => C; export declare function flow, B, C, D>(ab: (...a: A) => B, bc: (b: B) => C, cd: (c: C) => D): (...a: A) => D; export declare function flow, B, C, D, E>(ab: (...a: A) => B, bc: (b: B) => C, cd: (c: C) => D, de: (d: D) => E): (...a: A) => E; export declare function flow, B, C, D, E, F>(ab: (...a: A) => B, bc: (b: B) => C, cd: (c: C) => D, de: (d: D) => E, ef: (e: E) => F): (...a: A) => F; export declare function flow, B, C, D, E, F, G>(ab: (...a: A) => B, bc: (b: B) => C, cd: (c: C) => D, de: (d: D) => E, ef: (e: E) => F, fg: (f: F) => G): (...a: A) => G; export declare function flow, B, C, D, E, F, G, H>(ab: (...a: A) => B, bc: (b: B) => C, cd: (c: C) => D, de: (d: D) => E, ef: (e: E) => F, fg: (f: F) => G, gh: (g: G) => H): (...a: A) => H; export declare function flow, B, C, D, E, F, G, H, I>(ab: (...a: A) => B, bc: (b: B) => C, cd: (c: C) => D, de: (d: D) => E, ef: (e: E) => F, fg: (f: F) => G, gh: (g: G) => H, hi: (h: H) => I): (...a: A) => I; export declare function flow, B, C, D, E, F, G, H, I, J>(ab: (...a: A) => B, bc: (b: B) => C, cd: (c: C) => D, de: (d: D) => E, ef: (e: E) => F, fg: (f: F) => G, gh: (g: G) => H, hi: (h: H) => I, ij: (i: I) => J): (...a: A) => J; /** * @since 2.0.0 */ export declare function tuple>(...t: T): T; /** * @since 2.0.0 */ export declare function increment(n: number): number; /** * @since 2.0.0 */ export declare function decrement(n: number): number; /** * @since 2.0.0 */ export declare function absurd(_: never): A; /** * Creates a tupled version of this function: instead of `n` arguments, it accepts a single tuple argument. * * @example * import { tupled } from 'fp-ts/function' * * const add = tupled((x: number, y: number): number => x + y) * * assert.strictEqual(add([1, 2]), 3) * * @since 2.4.0 */ export declare function tupled, B>(f: (...a: A) => B): (a: A) => B; /** * Inverse function of `tupled` * * @since 2.4.0 */ export declare function untupled, B>(f: (a: A) => B): (...a: A) => B; /** * Pipes the value of an expression into a pipeline of functions. * * See also [`flow`](#flow). * * @example * import { pipe } from 'fp-ts/function' * * const len = (s: string): number => s.length * const double = (n: number): number => n * 2 * * // without pipe * assert.strictEqual(double(len('aaa')), 6) * * // with pipe * assert.strictEqual(pipe('aaa', len, double), 6) * * @since 2.6.3 */ export declare function pipe(a: A): A; export declare function pipe(a: A, ab: (a: A) => B): B; export declare function pipe(a: A, ab: (a: A) => B, bc: (b: B) => C): C; export declare function pipe(a: A, ab: (a: A) => B, bc: (b: B) => C, cd: (c: C) => D): D; export declare function pipe(a: A, ab: (a: A) => B, bc: (b: B) => C, cd: (c: C) => D, de: (d: D) => E): E; export declare function pipe(a: A, ab: (a: A) => B, bc: (b: B) => C, cd: (c: C) => D, de: (d: D) => E, ef: (e: E) => F): F; export declare function pipe(a: A, ab: (a: A) => B, bc: (b: B) => C, cd: (c: C) => D, de: (d: D) => E, ef: (e: E) => F, fg: (f: F) => G): G; export declare function pipe(a: A, ab: (a: A) => B, bc: (b: B) => C, cd: (c: C) => D, de: (d: D) => E, ef: (e: E) => F, fg: (f: F) => G, gh: (g: G) => H): H; export declare function pipe(a: A, ab: (a: A) => B, bc: (b: B) => C, cd: (c: C) => D, de: (d: D) => E, ef: (e: E) => F, fg: (f: F) => G, gh: (g: G) => H, hi: (h: H) => I): I; export declare function pipe(a: A, ab: (a: A) => B, bc: (b: B) => C, cd: (c: C) => D, de: (d: D) => E, ef: (e: E) => F, fg: (f: F) => G, gh: (g: G) => H, hi: (h: H) => I, ij: (i: I) => J): J; export declare function pipe(a: A, ab: (a: A) => B, bc: (b: B) => C, cd: (c: C) => D, de: (d: D) => E, ef: (e: E) => F, fg: (f: F) => G, gh: (g: G) => H, hi: (h: H) => I, ij: (i: I) => J, jk: (j: J) => K): K; export declare function pipe(a: A, ab: (a: A) => B, bc: (b: B) => C, cd: (c: C) => D, de: (d: D) => E, ef: (e: E) => F, fg: (f: F) => G, gh: (g: G) => H, hi: (h: H) => I, ij: (i: I) => J, jk: (j: J) => K, kl: (k: K) => L): L; export declare function pipe(a: A, ab: (a: A) => B, bc: (b: B) => C, cd: (c: C) => D, de: (d: D) => E, ef: (e: E) => F, fg: (f: F) => G, gh: (g: G) => H, hi: (h: H) => I, ij: (i: I) => J, jk: (j: J) => K, kl: (k: K) => L, lm: (l: L) => M): M; export declare function pipe(a: A, ab: (a: A) => B, bc: (b: B) => C, cd: (c: C) => D, de: (d: D) => E, ef: (e: E) => F, fg: (f: F) => G, gh: (g: G) => H, hi: (h: H) => I, ij: (i: I) => J, jk: (j: J) => K, kl: (k: K) => L, lm: (l: L) => M, mn: (m: M) => N): N; export declare function pipe(a: A, ab: (a: A) => B, bc: (b: B) => C, cd: (c: C) => D, de: (d: D) => E, ef: (e: E) => F, fg: (f: F) => G, gh: (g: G) => H, hi: (h: H) => I, ij: (i: I) => J, jk: (j: J) => K, kl: (k: K) => L, lm: (l: L) => M, mn: (m: M) => N, no: (n: N) => O): O; export declare function pipe(a: A, ab: (a: A) => B, bc: (b: B) => C, cd: (c: C) => D, de: (d: D) => E, ef: (e: E) => F, fg: (f: F) => G, gh: (g: G) => H, hi: (h: H) => I, ij: (i: I) => J, jk: (j: J) => K, kl: (k: K) => L, lm: (l: L) => M, mn: (m: M) => N, no: (n: N) => O, op: (o: O) => P): P; export declare function pipe(a: A, ab: (a: A) => B, bc: (b: B) => C, cd: (c: C) => D, de: (d: D) => E, ef: (e: E) => F, fg: (f: F) => G, gh: (g: G) => H, hi: (h: H) => I, ij: (i: I) => J, jk: (j: J) => K, kl: (k: K) => L, lm: (l: L) => M, mn: (m: M) => N, no: (n: N) => O, op: (o: O) => P, pq: (p: P) => Q): Q; export declare function pipe(a: A, ab: (a: A) => B, bc: (b: B) => C, cd: (c: C) => D, de: (d: D) => E, ef: (e: E) => F, fg: (f: F) => G, gh: (g: G) => H, hi: (h: H) => I, ij: (i: I) => J, jk: (j: J) => K, kl: (k: K) => L, lm: (l: L) => M, mn: (m: M) => N, no: (n: N) => O, op: (o: O) => P, pq: (p: P) => Q, qr: (q: Q) => R): R; export declare function pipe(a: A, ab: (a: A) => B, bc: (b: B) => C, cd: (c: C) => D, de: (d: D) => E, ef: (e: E) => F, fg: (f: F) => G, gh: (g: G) => H, hi: (h: H) => I, ij: (i: I) => J, jk: (j: J) => K, kl: (k: K) => L, lm: (l: L) => M, mn: (m: M) => N, no: (n: N) => O, op: (o: O) => P, pq: (p: P) => Q, qr: (q: Q) => R, rs: (r: R) => S): S; export declare function pipe(a: A, ab: (a: A) => B, bc: (b: B) => C, cd: (c: C) => D, de: (d: D) => E, ef: (e: E) => F, fg: (f: F) => G, gh: (g: G) => H, hi: (h: H) => I, ij: (i: I) => J, jk: (j: J) => K, kl: (k: K) => L, lm: (l: L) => M, mn: (m: M) => N, no: (n: N) => O, op: (o: O) => P, pq: (p: P) => Q, qr: (q: Q) => R, rs: (r: R) => S, st: (s: S) => T): T; /** * Type hole simulation * * @since 2.7.0 */ export declare const hole: () => T; /** * @since 2.11.0 */ export declare const SK: (_: A, b: B) => B; /** * Use `Refinement` module instead. * * @category zone of death * @since 2.0.0 * @deprecated */ export interface Refinement { (a: A): a is B; } /** * Use `Predicate` module instead. * * @category zone of death * @since 2.0.0 * @deprecated */ export interface Predicate { (a: A): boolean; } /** * Use `Predicate` module instead. * * @category zone of death * @since 2.0.0 * @deprecated */ export declare function not(predicate: Predicate): Predicate; /** * Use `Endomorphism` module instead. * * @category zone of death * @since 2.0.0 * @deprecated */ export interface Endomorphism { (a: A): A; } /** * Use `Endomorphism` module instead. * * @category zone of death * @since 2.10.0 * @deprecated */ export declare const getEndomorphismMonoid: () => Monoid>; /** * A lazy argument. * * @since 2.15.0 */ export interface LazyArg { (): A; } /** * Use `LazyArg` instead. * * @category lagacy * @since 2.0.0 */ export interface Lazy { (): A; }