/** * Various functions to aid in working with tuples. * * @since 0.12.0 */ import type { Bounded } from "fp-ts/Bounded"; import { type Eq } from "fp-ts/Eq"; import type { Functor, Functor1, Functor2, Functor2C, Functor3, Functor4 } from "fp-ts/Functor"; import type { HKT, Kind, Kind2, Kind3, Kind4, URIS, URIS2, URIS3, URIS4 } from "fp-ts/HKT"; import { type Ord } from "fp-ts/Ord"; import type { Enum } from "./Enum"; /** * Duplicate a value into a tuple. * * @example * import { dup } from 'fp-ts-std/Tuple' * * assert.deepStrictEqual(dup('x'), ['x', 'x']) * * @category 3 Functions * @since 0.12.0 */ export declare const dup: (x: A) => [A, A]; /** * Apply a function, collecting the output alongside the input. A dual to * `toSnd`. * * @example * import { toFst } from 'fp-ts-std/Tuple' * import { fromNumber } from 'fp-ts-std/String' * * assert.deepStrictEqual(toFst(fromNumber)(5), ['5', 5]) * * @category 3 Functions * @since 0.12.0 */ export declare const toFst: (f: (x: A) => B) => (x: A) => [B, A]; /** * Apply a function, collecting the input alongside the output. A dual to * `toFst`. * * @example * import { toFst } from 'fp-ts-std/Tuple' * import { fromNumber } from 'fp-ts-std/String' * * assert.deepStrictEqual(toFst(fromNumber)(5), ['5', 5]) * * @category 3 Functions * @since 0.12.0 */ export declare const toSnd: (f: (x: A) => B) => (x: A) => [A, B]; /** * Apply a functorial function, collecting the output alongside the input. A * dual to `traverseToSnd`. * * @example * import { traverseToFst } from 'fp-ts-std/Tuple' * import * as O from 'fp-ts/Option' * import { flow, constant } from 'fp-ts/function' * import { fromNumber } from 'fp-ts-std/String' * * const traverseToFstO = traverseToFst(O.Functor) * const fromNumberO = flow(fromNumber, O.some) * * assert.deepStrictEqual(traverseToFstO(fromNumberO)(5), O.some(['5', 5])) * assert.deepStrictEqual(traverseToFstO(constant(O.none))(5), O.none) * * @category 2 Typeclass Methods * @since 0.12.0 */ export declare function traverseToFst(F: Functor4): (g: (x: A) => Kind4) => (x: A) => Kind4; export declare function traverseToFst(F: Functor3): (g: (x: A) => Kind3) => (x: A) => Kind3; export declare function traverseToFst(F: Functor2): (g: (x: A) => Kind2) => (x: A) => Kind2; export declare function traverseToFst(F: Functor2C): (g: (x: A) => Kind2) => (x: A) => Kind2; export declare function traverseToFst(F: Functor1): (g: (x: A) => Kind) => (x: A) => Kind; export declare function traverseToFst(F: Functor): (g: (x: A) => HKT) => (x: A) => HKT; /** * Apply a functorial function, collecting the input alongside the output. A * dual to `traverseToFst`. * * @example * import { traverseToSnd } from 'fp-ts-std/Tuple' * import * as O from 'fp-ts/Option' * import { flow, constant } from 'fp-ts/function' * import { fromNumber } from 'fp-ts-std/String' * * const traverseToSndO = traverseToSnd(O.Functor) * const fromNumberO = flow(fromNumber, O.some) * * assert.deepStrictEqual(traverseToSndO(fromNumberO)(5), O.some([5, '5'])) * assert.deepStrictEqual(traverseToSndO(constant(O.none))(5), O.none) * * @category 2 Typeclass Methods * @since 0.12.0 */ export declare function traverseToSnd(F: Functor4): (g: (x: A) => Kind4) => (x: A) => Kind4; export declare function traverseToSnd(F: Functor3): (g: (x: A) => Kind3) => (x: A) => Kind3; export declare function traverseToSnd(F: Functor2): (g: (x: A) => Kind2) => (x: A) => Kind2; export declare function traverseToSnd(F: Functor2C): (g: (x: A) => Kind2) => (x: A) => Kind2; export declare function traverseToSnd(F: Functor1): (g: (x: A) => Kind) => (x: A) => Kind; export declare function traverseToSnd(F: Functor): (g: (x: A) => HKT) => (x: A) => HKT; /** * Curried tuple construction. A dual to `withSnd`. Equivalent to Haskell's * tuple sections. * * @example * import { pipe } from 'fp-ts/function' * import { withFst } from 'fp-ts-std/Tuple' * * assert.deepStrictEqual(pipe('x', withFst('y')), ['y', 'x']) * * @category 3 Functions * @since 0.12.0 */ export declare const withFst: (x: A) => (y: B) => [A, B]; /** * Curried tuple construction. A dual to `withFst`. Equivalent to Haskell's * tuple sections. * * @example * import { pipe } from 'fp-ts/function' * import { withSnd } from 'fp-ts-std/Tuple' * * assert.deepStrictEqual(pipe('x', withSnd('y')), ['x', 'y']) * * @category 3 Functions * @since 0.12.0 */ export declare const withSnd: (x: A) => (y: B) => [B, A]; /** * Create a tuple. Helps with fighting TypeScript's type inferrence without * having to repeat yourself or use `as const`. * * @example * import { create } from 'fp-ts-std/Tuple' * * assert.deepStrictEqual(create(['x', 'y']), ['x', 'y']) * * @category 3 Functions * @since 0.12.0 */ export declare const create: (xs: [A, B]) => [A, B]; /** * Apply a function to both elements of a tuple. * * @example * import { pipe } from 'fp-ts/function' * import { mapBoth } from 'fp-ts-std/Tuple' * import { multiply } from 'fp-ts-std/Number' * * const xs = pipe([3, 5], mapBoth(multiply(2))) * * assert.deepStrictEqual(xs, [6, 10]) * * @category 2 Typeclass Methods * @since 0.14.0 */ export declare const mapBoth: (f: (x: A) => B) => (xs: [A, A]) => [B, B]; /** * Send an input to two functions and combine their outputs in a tuple. For a * variadic version, consider `fork` in `Function`. * * @example * import { fanout } from 'fp-ts-std/Tuple' * import { add } from 'fp-ts-std/Number' * import * as S from 'fp-ts-std/String' * * const add2 = add(2) * * assert.deepStrictEqual(fanout(S.fromNumber)(add2)(0), ['0', 2]) * * @category 3 Functions * @since 0.15.0 */ export declare const fanout: (f: (x: A) => B) => (g: (x: A) => C) => (x: A) => [B, C]; /** * Derive `Eq` for a tuple given `Eq` instances for its members. * * @example * import { getEq } from 'fp-ts-std/Tuple' * import * as Str from 'fp-ts/string' * import * as Num from 'fp-ts/number' * * const Eq = getEq(Str.Eq)(Num.Eq) * * assert.strictEqual(Eq.equals(['foo', 123], ['foo', 123]), true) * assert.strictEqual(Eq.equals(['foo', 123], ['bar', 123]), false) * * @category 1 Typeclass Instances * @since 0.17.0 */ export declare const getEq: (EA: Eq) => (EB: Eq) => Eq<[A, B]>; /** * Derive `Ord` for a tuple given `Ord` instances for its members. The first * component is compared first. * * @example * import { getOrd } from 'fp-ts-std/Tuple' * import * as Str from 'fp-ts/string' * import * as Num from 'fp-ts/number' * import { LT, EQ, GT } from 'fp-ts-std/Ordering' * * const Ord = getOrd(Str.Ord)(Num.Ord) * * assert.strictEqual(Ord.compare(['foo', 123], ['foo', 123]), EQ) * assert.strictEqual(Ord.compare(['foo', 123], ['bar', 123]), GT) * * @category 1 Typeclass Instances * @since 0.17.0 */ export declare const getOrd: (OA: Ord) => (OB: Ord) => Ord<[A, B]>; /** * Derive a `Bounded` instance for a tuple in which the top and bottom * bounds are `[A.top, B.top]` and `[A.bottom, B.bottom]` respectively. * * @example * import { getBounded } from 'fp-ts-std/Tuple' * import * as Bool from 'fp-ts-std/Boolean' * * assert.deepStrictEqual( * getBounded(Bool.Bounded)(Bool.Bounded).top, * [true, true], * ) * * @category 1 Typeclass Instances * @since 0.17.0 */ export declare const getBounded: (BA: Bounded) => (BB: Bounded) => Bounded<[A, B]>; /** * Derive an `Enum` instance for a tuple given an `Enum` instance for each * member. * * @example * import { universe } from 'fp-ts-std/Enum' * import { Enum as EnumBool } from 'fp-ts-std/Boolean' * import { getEnum } from 'fp-ts-std/Tuple' * * const E = getEnum(EnumBool)(EnumBool) * * assert.deepStrictEqual( * universe(E), * [[false, false], [true, false], [false, true], [true, true]], * ) * * @category 1 Typeclass Instances * @since 0.17.0 */ export declare const getEnum: (EA: Enum) => (EB: Enum) => Enum<[A, B]>; //# sourceMappingURL=Tuple.d.ts.map