| /** | |
| * Works with fixed-length arrays, also called tuples. | |
| * | |
| * The runtime helpers in this module create new tuples instead of mutating | |
| * their inputs, and the types preserve element positions where possible. The | |
| * helpers cover tuple construction, indexed access, selecting or removing | |
| * positions, appending values, transforming elements, renaming indices, mapping | |
| * typed positions, and deriving comparison or combination helpers for tuple | |
| * shapes. | |
| * | |
| * @since 2.0.0 | |
| */ | |
| import * as Combiner from "./Combiner.ts"; | |
| import * as Equivalence from "./Equivalence.ts"; | |
| import * as order from "./Order.ts"; | |
| import * as Reducer from "./Reducer.ts"; | |
| import type { Apply, Lambda } from "./Struct.ts"; | |
| /** | |
| * Creates a tuple from the provided arguments. | |
| * | |
| * **When to use** | |
| * | |
| * Use when you need a properly typed tuple without writing `[a, b, c] as const` | |
| * or another manual cast. | |
| * | |
| * **Details** | |
| * | |
| * The returned value has the exact tuple type, with each element's literal type | |
| * preserved. | |
| * | |
| * **Example** (Creating a tuple) | |
| * | |
| * ```ts | |
| * import { Tuple } from "effect" | |
| * | |
| * const point = Tuple.make(10, 20, "red") | |
| * console.log(point) // [10, 20, "red"] | |
| * ``` | |
| * | |
| * @see {@link get} – access a single element by index | |
| * @see {@link appendElement} – append an element to a tuple | |
| * @category constructors | |
| * @since 2.0.0 | |
| */ | |
| export declare const make: <Elements extends ReadonlyArray<unknown>>(...elements: Elements) => Elements; | |
| type Indices<T extends ReadonlyArray<unknown>> = Exclude<Partial<T>["length"], T["length"]>; | |
| /** | |
| * Retrieves the element at the specified index from a tuple. | |
| * | |
| * **When to use** | |
| * | |
| * Use when a single tuple element should be extracted in a pipeline. | |
| * | |
| * **Details** | |
| * | |
| * The index is constrained to valid tuple positions at the type level. | |
| * | |
| * **Example** (Extracting an element by index) | |
| * | |
| * ```ts | |
| * import { pipe, Tuple } from "effect" | |
| * | |
| * const last = pipe(Tuple.make(1, true, "hello"), Tuple.get(2)) | |
| * console.log(last) // "hello" | |
| * ``` | |
| * | |
| * @see {@link make} – create a tuple | |
| * @see {@link pick} – extract multiple elements into a new tuple | |
| * @category getters | |
| * @since 4.0.0 | |
| */ | |
| export declare const get: { | |
| /** | |
| * Retrieves the element at the specified index from a tuple. | |
| * | |
| * **When to use** | |
| * | |
| * Use when a single tuple element should be extracted in a pipeline. | |
| * | |
| * **Details** | |
| * | |
| * The index is constrained to valid tuple positions at the type level. | |
| * | |
| * **Example** (Extracting an element by index) | |
| * | |
| * ```ts | |
| * import { pipe, Tuple } from "effect" | |
| * | |
| * const last = pipe(Tuple.make(1, true, "hello"), Tuple.get(2)) | |
| * console.log(last) // "hello" | |
| * ``` | |
| * | |
| * @see {@link make} – create a tuple | |
| * @see {@link pick} – extract multiple elements into a new tuple | |
| * @category getters | |
| * @since 4.0.0 | |
| */ | |
| <const T extends ReadonlyArray<unknown>, I extends Indices<T> & keyof T>(index: I): (self: T) => T[I]; | |
| /** | |
| * Retrieves the element at the specified index from a tuple. | |
| * | |
| * **When to use** | |
| * | |
| * Use when a single tuple element should be extracted in a pipeline. | |
| * | |
| * **Details** | |
| * | |
| * The index is constrained to valid tuple positions at the type level. | |
| * | |
| * **Example** (Extracting an element by index) | |
| * | |
| * ```ts | |
| * import { pipe, Tuple } from "effect" | |
| * | |
| * const last = pipe(Tuple.make(1, true, "hello"), Tuple.get(2)) | |
| * console.log(last) // "hello" | |
| * ``` | |
| * | |
| * @see {@link make} – create a tuple | |
| * @see {@link pick} – extract multiple elements into a new tuple | |
| * @category getters | |
| * @since 4.0.0 | |
| */ | |
| <const T extends ReadonlyArray<unknown>, I extends Indices<T> & keyof T>(self: T, index: I): T[I]; | |
| }; | |
| type _BuildTuple<T extends ReadonlyArray<unknown>, K, Acc extends ReadonlyArray<unknown> = [], I extends ReadonlyArray<unknown> = []> = I["length"] extends T["length"] ? Acc : _BuildTuple<T, K, I["length"] extends K ? [...Acc, T[I["length"]]] : Acc, [ | |
| ...I, | |
| unknown | |
| ]>; | |
| type PickTuple<T extends ReadonlyArray<unknown>, K> = _BuildTuple<T, K>; | |
| /** | |
| * Creates a new tuple containing only the elements at the specified indices. | |
| * | |
| * **When to use** | |
| * | |
| * Use to select a subset of elements from a tuple by position. | |
| * | |
| * **Details** | |
| * | |
| * The result order matches the order of the provided indices. | |
| * | |
| * **Example** (Selecting elements by index) | |
| * | |
| * ```ts | |
| * import { Tuple } from "effect" | |
| * | |
| * const result = Tuple.pick(["a", "b", "c", "d"], [0, 2, 3]) | |
| * console.log(result) // ["a", "c", "d"] | |
| * ``` | |
| * | |
| * @see {@link omit} – the inverse (exclude indices instead) | |
| * @see {@link get} – extract a single element | |
| * @category filtering | |
| * @since 4.0.0 | |
| */ | |
| export declare const pick: { | |
| /** | |
| * Creates a new tuple containing only the elements at the specified indices. | |
| * | |
| * **When to use** | |
| * | |
| * Use to select a subset of elements from a tuple by position. | |
| * | |
| * **Details** | |
| * | |
| * The result order matches the order of the provided indices. | |
| * | |
| * **Example** (Selecting elements by index) | |
| * | |
| * ```ts | |
| * import { Tuple } from "effect" | |
| * | |
| * const result = Tuple.pick(["a", "b", "c", "d"], [0, 2, 3]) | |
| * console.log(result) // ["a", "c", "d"] | |
| * ``` | |
| * | |
| * @see {@link omit} – the inverse (exclude indices instead) | |
| * @see {@link get} – extract a single element | |
| * @category filtering | |
| * @since 4.0.0 | |
| */ | |
| <const T extends ReadonlyArray<unknown>, const I extends ReadonlyArray<Indices<T>>>(indices: I): (self: T) => PickTuple<T, I[number]>; | |
| /** | |
| * Creates a new tuple containing only the elements at the specified indices. | |
| * | |
| * **When to use** | |
| * | |
| * Use to select a subset of elements from a tuple by position. | |
| * | |
| * **Details** | |
| * | |
| * The result order matches the order of the provided indices. | |
| * | |
| * **Example** (Selecting elements by index) | |
| * | |
| * ```ts | |
| * import { Tuple } from "effect" | |
| * | |
| * const result = Tuple.pick(["a", "b", "c", "d"], [0, 2, 3]) | |
| * console.log(result) // ["a", "c", "d"] | |
| * ``` | |
| * | |
| * @see {@link omit} – the inverse (exclude indices instead) | |
| * @see {@link get} – extract a single element | |
| * @category filtering | |
| * @since 4.0.0 | |
| */ | |
| <const T extends ReadonlyArray<unknown>, const I extends ReadonlyArray<Indices<T>>>(self: T, indices: I): PickTuple<T, I[number]>; | |
| }; | |
| type OmitTuple<T extends ReadonlyArray<unknown>, K> = _BuildTuple<T, Exclude<Indices<T>, K>>; | |
| /** | |
| * Creates a new tuple with the elements at the specified indices removed. | |
| * | |
| * **When to use** | |
| * | |
| * Use to drop elements from a tuple by position. | |
| * | |
| * **Details** | |
| * | |
| * Elements not at the specified indices are kept in their original order. | |
| * | |
| * **Example** (Removing elements by index) | |
| * | |
| * ```ts | |
| * import { Tuple } from "effect" | |
| * | |
| * const result = Tuple.omit(["a", "b", "c", "d"], [1, 3]) | |
| * console.log(result) // ["a", "c"] | |
| * ``` | |
| * | |
| * @see {@link pick} – the inverse (keep only specified indices) | |
| * @category filtering | |
| * @since 4.0.0 | |
| */ | |
| export declare const omit: { | |
| /** | |
| * Creates a new tuple with the elements at the specified indices removed. | |
| * | |
| * **When to use** | |
| * | |
| * Use to drop elements from a tuple by position. | |
| * | |
| * **Details** | |
| * | |
| * Elements not at the specified indices are kept in their original order. | |
| * | |
| * **Example** (Removing elements by index) | |
| * | |
| * ```ts | |
| * import { Tuple } from "effect" | |
| * | |
| * const result = Tuple.omit(["a", "b", "c", "d"], [1, 3]) | |
| * console.log(result) // ["a", "c"] | |
| * ``` | |
| * | |
| * @see {@link pick} – the inverse (keep only specified indices) | |
| * @category filtering | |
| * @since 4.0.0 | |
| */ | |
| <const T extends ReadonlyArray<unknown>, const I extends ReadonlyArray<Indices<T>>>(indices: I): (self: T) => OmitTuple<T, I[number]>; | |
| /** | |
| * Creates a new tuple with the elements at the specified indices removed. | |
| * | |
| * **When to use** | |
| * | |
| * Use to drop elements from a tuple by position. | |
| * | |
| * **Details** | |
| * | |
| * Elements not at the specified indices are kept in their original order. | |
| * | |
| * **Example** (Removing elements by index) | |
| * | |
| * ```ts | |
| * import { Tuple } from "effect" | |
| * | |
| * const result = Tuple.omit(["a", "b", "c", "d"], [1, 3]) | |
| * console.log(result) // ["a", "c"] | |
| * ``` | |
| * | |
| * @see {@link pick} – the inverse (keep only specified indices) | |
| * @category filtering | |
| * @since 4.0.0 | |
| */ | |
| <const T extends ReadonlyArray<unknown>, const I extends ReadonlyArray<Indices<T>>>(self: T, indices: I): OmitTuple<T, I[number]>; | |
| }; | |
| /** | |
| * Appends a single element to the end of a tuple. | |
| * | |
| * **When to use** | |
| * | |
| * Use when you need the appended value to remain part of the tuple's type-level | |
| * shape and preserve literal element positions. | |
| * | |
| * **Details** | |
| * | |
| * The result type is `[...T, E]`, preserving all existing element types. | |
| * | |
| * **Example** (Appending an element) | |
| * | |
| * ```ts | |
| * import { pipe, Tuple } from "effect" | |
| * | |
| * const result = pipe(Tuple.make(1, 2), Tuple.appendElement("end")) | |
| * console.log(result) // [1, 2, "end"] | |
| * ``` | |
| * | |
| * @see {@link appendElements} – append multiple elements (another tuple) | |
| * @category combining | |
| * @since 2.0.0 | |
| */ | |
| export declare const appendElement: { | |
| /** | |
| * Appends a single element to the end of a tuple. | |
| * | |
| * **When to use** | |
| * | |
| * Use when you need the appended value to remain part of the tuple's type-level | |
| * shape and preserve literal element positions. | |
| * | |
| * **Details** | |
| * | |
| * The result type is `[...T, E]`, preserving all existing element types. | |
| * | |
| * **Example** (Appending an element) | |
| * | |
| * ```ts | |
| * import { pipe, Tuple } from "effect" | |
| * | |
| * const result = pipe(Tuple.make(1, 2), Tuple.appendElement("end")) | |
| * console.log(result) // [1, 2, "end"] | |
| * ``` | |
| * | |
| * @see {@link appendElements} – append multiple elements (another tuple) | |
| * @category combining | |
| * @since 2.0.0 | |
| */ | |
| <const E>(element: E): <const T extends ReadonlyArray<unknown>>(self: T) => [...T, E]; | |
| /** | |
| * Appends a single element to the end of a tuple. | |
| * | |
| * **When to use** | |
| * | |
| * Use when you need the appended value to remain part of the tuple's type-level | |
| * shape and preserve literal element positions. | |
| * | |
| * **Details** | |
| * | |
| * The result type is `[...T, E]`, preserving all existing element types. | |
| * | |
| * **Example** (Appending an element) | |
| * | |
| * ```ts | |
| * import { pipe, Tuple } from "effect" | |
| * | |
| * const result = pipe(Tuple.make(1, 2), Tuple.appendElement("end")) | |
| * console.log(result) // [1, 2, "end"] | |
| * ``` | |
| * | |
| * @see {@link appendElements} – append multiple elements (another tuple) | |
| * @category combining | |
| * @since 2.0.0 | |
| */ | |
| <const T extends ReadonlyArray<unknown>, const E>(self: T, element: E): [...T, E]; | |
| }; | |
| /** | |
| * Concatenates two tuples into a single tuple. | |
| * | |
| * **When to use** | |
| * | |
| * Use to append all elements from one tuple to another tuple. | |
| * | |
| * **Details** | |
| * | |
| * The result type is `[...T1, ...T2]`, preserving all element types from both | |
| * tuples. Neither input tuple is mutated; a fresh tuple is returned. | |
| * | |
| * **Example** (Concatenating tuples) | |
| * | |
| * ```ts | |
| * import { pipe, Tuple } from "effect" | |
| * | |
| * const result = pipe(Tuple.make(1, 2), Tuple.appendElements(["a", "b"] as const)) | |
| * console.log(result) // [1, 2, "a", "b"] | |
| * ``` | |
| * | |
| * @see {@link appendElement} – append a single element | |
| * @category combining | |
| * @since 4.0.0 | |
| */ | |
| export declare const appendElements: { | |
| /** | |
| * Concatenates two tuples into a single tuple. | |
| * | |
| * **When to use** | |
| * | |
| * Use to append all elements from one tuple to another tuple. | |
| * | |
| * **Details** | |
| * | |
| * The result type is `[...T1, ...T2]`, preserving all element types from both | |
| * tuples. Neither input tuple is mutated; a fresh tuple is returned. | |
| * | |
| * **Example** (Concatenating tuples) | |
| * | |
| * ```ts | |
| * import { pipe, Tuple } from "effect" | |
| * | |
| * const result = pipe(Tuple.make(1, 2), Tuple.appendElements(["a", "b"] as const)) | |
| * console.log(result) // [1, 2, "a", "b"] | |
| * ``` | |
| * | |
| * @see {@link appendElement} – append a single element | |
| * @category combining | |
| * @since 4.0.0 | |
| */ | |
| <const T2 extends ReadonlyArray<unknown>>(that: T2): <const T1 extends ReadonlyArray<unknown>>(self: T1) => [...T1, ...T2]; | |
| /** | |
| * Concatenates two tuples into a single tuple. | |
| * | |
| * **When to use** | |
| * | |
| * Use to append all elements from one tuple to another tuple. | |
| * | |
| * **Details** | |
| * | |
| * The result type is `[...T1, ...T2]`, preserving all element types from both | |
| * tuples. Neither input tuple is mutated; a fresh tuple is returned. | |
| * | |
| * **Example** (Concatenating tuples) | |
| * | |
| * ```ts | |
| * import { pipe, Tuple } from "effect" | |
| * | |
| * const result = pipe(Tuple.make(1, 2), Tuple.appendElements(["a", "b"] as const)) | |
| * console.log(result) // [1, 2, "a", "b"] | |
| * ``` | |
| * | |
| * @see {@link appendElement} – append a single element | |
| * @category combining | |
| * @since 4.0.0 | |
| */ | |
| <const T1 extends ReadonlyArray<unknown>, const T2 extends ReadonlyArray<unknown>>(self: T1, that: T2): [...T1, ...T2]; | |
| }; | |
| type Evolver<T> = { | |
| readonly [I in keyof T]?: ((a: T[I]) => unknown) | undefined; | |
| }; | |
| type Evolved<T, E> = { | |
| [I in keyof T]: I extends keyof E ? (E[I] extends (...a: any) => infer R ? R : T[I]) : T[I]; | |
| }; | |
| /** | |
| * Transforms elements of a tuple by providing an array of transform functions. | |
| * Each function applies to the element at the same position. Positions beyond | |
| * the array's length are copied unchanged. | |
| * | |
| * **When to use** | |
| * | |
| * Use when you want to update the first N elements while keeping the rest. | |
| * | |
| * **Details** | |
| * | |
| * Each transform function receives the current value and can return a different | |
| * type. | |
| * | |
| * **Example** (Transforming selected elements) | |
| * | |
| * ```ts | |
| * import { pipe, Tuple } from "effect" | |
| * | |
| * const result = pipe( | |
| * Tuple.make("hello", 42, true), | |
| * Tuple.evolve([ | |
| * (s) => s.toUpperCase(), | |
| * (n) => n * 2 | |
| * ]) | |
| * ) | |
| * console.log(result) // ["HELLO", 84, true] | |
| * ``` | |
| * | |
| * @see {@link map} – apply the same transformation to all elements | |
| * @see {@link renameIndices} – swap element positions | |
| * @category mapping | |
| * @since 4.0.0 | |
| */ | |
| export declare const evolve: { | |
| /** | |
| * Transforms elements of a tuple by providing an array of transform functions. | |
| * Each function applies to the element at the same position. Positions beyond | |
| * the array's length are copied unchanged. | |
| * | |
| * **When to use** | |
| * | |
| * Use when you want to update the first N elements while keeping the rest. | |
| * | |
| * **Details** | |
| * | |
| * Each transform function receives the current value and can return a different | |
| * type. | |
| * | |
| * **Example** (Transforming selected elements) | |
| * | |
| * ```ts | |
| * import { pipe, Tuple } from "effect" | |
| * | |
| * const result = pipe( | |
| * Tuple.make("hello", 42, true), | |
| * Tuple.evolve([ | |
| * (s) => s.toUpperCase(), | |
| * (n) => n * 2 | |
| * ]) | |
| * ) | |
| * console.log(result) // ["HELLO", 84, true] | |
| * ``` | |
| * | |
| * @see {@link map} – apply the same transformation to all elements | |
| * @see {@link renameIndices} – swap element positions | |
| * @category mapping | |
| * @since 4.0.0 | |
| */ | |
| <const T extends ReadonlyArray<unknown>, const E extends Evolver<T>>(evolver: E): (self: T) => Evolved<T, E>; | |
| /** | |
| * Transforms elements of a tuple by providing an array of transform functions. | |
| * Each function applies to the element at the same position. Positions beyond | |
| * the array's length are copied unchanged. | |
| * | |
| * **When to use** | |
| * | |
| * Use when you want to update the first N elements while keeping the rest. | |
| * | |
| * **Details** | |
| * | |
| * Each transform function receives the current value and can return a different | |
| * type. | |
| * | |
| * **Example** (Transforming selected elements) | |
| * | |
| * ```ts | |
| * import { pipe, Tuple } from "effect" | |
| * | |
| * const result = pipe( | |
| * Tuple.make("hello", 42, true), | |
| * Tuple.evolve([ | |
| * (s) => s.toUpperCase(), | |
| * (n) => n * 2 | |
| * ]) | |
| * ) | |
| * console.log(result) // ["HELLO", 84, true] | |
| * ``` | |
| * | |
| * @see {@link map} – apply the same transformation to all elements | |
| * @see {@link renameIndices} – swap element positions | |
| * @category mapping | |
| * @since 4.0.0 | |
| */ | |
| <const T extends ReadonlyArray<unknown>, const E extends Evolver<T>>(self: T, evolver: E): Evolved<T, E>; | |
| }; | |
| /** | |
| * Renames tuple indices by providing an array of stringified source | |
| * indices. Each position in the array specifies which index to read from | |
| * (e.g., `["2", "1", "0"]` reverses a 3-element tuple). | |
| * | |
| * **When to use** | |
| * | |
| * Use to reorder tuple elements while preserving index-specific types. | |
| * | |
| * **Details** | |
| * | |
| * The mapping returns a tuple in the requested index order. | |
| * | |
| * **Gotchas** | |
| * | |
| * The mapping uses stringified source indices, not arbitrary names. | |
| * | |
| * **Example** (Swapping elements) | |
| * | |
| * ```ts | |
| * import { pipe, Tuple } from "effect" | |
| * | |
| * const result = pipe( | |
| * Tuple.make("a", "b", "c"), | |
| * Tuple.renameIndices(["2", "1", "0"]) | |
| * ) | |
| * console.log(result) // ["c", "b", "a"] | |
| * ``` | |
| * | |
| * @see {@link evolve} – transform element values instead of positions | |
| * @category Index utilities | |
| * @since 4.0.0 | |
| */ | |
| export declare const renameIndices: { | |
| /** | |
| * Renames tuple indices by providing an array of stringified source | |
| * indices. Each position in the array specifies which index to read from | |
| * (e.g., `["2", "1", "0"]` reverses a 3-element tuple). | |
| * | |
| * **When to use** | |
| * | |
| * Use to reorder tuple elements while preserving index-specific types. | |
| * | |
| * **Details** | |
| * | |
| * The mapping returns a tuple in the requested index order. | |
| * | |
| * **Gotchas** | |
| * | |
| * The mapping uses stringified source indices, not arbitrary names. | |
| * | |
| * **Example** (Swapping elements) | |
| * | |
| * ```ts | |
| * import { pipe, Tuple } from "effect" | |
| * | |
| * const result = pipe( | |
| * Tuple.make("a", "b", "c"), | |
| * Tuple.renameIndices(["2", "1", "0"]) | |
| * ) | |
| * console.log(result) // ["c", "b", "a"] | |
| * ``` | |
| * | |
| * @see {@link evolve} – transform element values instead of positions | |
| * @category Index utilities | |
| * @since 4.0.0 | |
| */ | |
| <const T extends ReadonlyArray<unknown>, const M extends { | |
| readonly [I in keyof T]?: `${keyof T & string}`; | |
| }>(mapping: M): (self: T) => { | |
| [I in keyof T]: I extends keyof M ? M[I] extends keyof T ? T[M[I]] : T[I] : T[I]; | |
| }; | |
| /** | |
| * Renames tuple indices by providing an array of stringified source | |
| * indices. Each position in the array specifies which index to read from | |
| * (e.g., `["2", "1", "0"]` reverses a 3-element tuple). | |
| * | |
| * **When to use** | |
| * | |
| * Use to reorder tuple elements while preserving index-specific types. | |
| * | |
| * **Details** | |
| * | |
| * The mapping returns a tuple in the requested index order. | |
| * | |
| * **Gotchas** | |
| * | |
| * The mapping uses stringified source indices, not arbitrary names. | |
| * | |
| * **Example** (Swapping elements) | |
| * | |
| * ```ts | |
| * import { pipe, Tuple } from "effect" | |
| * | |
| * const result = pipe( | |
| * Tuple.make("a", "b", "c"), | |
| * Tuple.renameIndices(["2", "1", "0"]) | |
| * ) | |
| * console.log(result) // ["c", "b", "a"] | |
| * ``` | |
| * | |
| * @see {@link evolve} – transform element values instead of positions | |
| * @category Index utilities | |
| * @since 4.0.0 | |
| */ | |
| <const T extends ReadonlyArray<unknown>, const M extends { | |
| readonly [I in keyof T]?: `${keyof T & string}`; | |
| }>(self: T, mapping: M): { | |
| [I in keyof T]: I extends keyof M ? M[I] extends keyof T ? T[M[I]] : T[I] : T[I]; | |
| }; | |
| }; | |
| /** | |
| * Applies a `Struct.Lambda` transformation to every element in a tuple. | |
| * | |
| * **When to use** | |
| * | |
| * Use when you want to apply the same transformation to every tuple element. | |
| * | |
| * **Details** | |
| * | |
| * The lambda lets the compiler track the output type for each element. | |
| * | |
| * **Gotchas** | |
| * | |
| * The lambda must be created with `Struct.lambda`; a plain function will not | |
| * type-check. | |
| * | |
| * **Example** (Wrapping every element in an array) | |
| * | |
| * ```ts | |
| * import { pipe, Struct, Tuple } from "effect" | |
| * | |
| * interface AsArray extends Struct.Lambda { | |
| * <A>(self: A): Array<A> | |
| * readonly "~lambda.out": Array<this["~lambda.in"]> | |
| * } | |
| * | |
| * const asArray = Struct.lambda<AsArray>((a) => [a]) | |
| * const result = pipe(Tuple.make(1, "hello", true), Tuple.map(asArray)) | |
| * console.log(result) // [[1], ["hello"], [true]] | |
| * ``` | |
| * | |
| * @see {@link mapPick} – apply a lambda only to selected indices | |
| * @see {@link mapOmit} – apply a lambda to all indices except selected ones | |
| * @see {@link evolve} – apply different functions to different indices | |
| * @category mapping | |
| * @since 3.9.0 | |
| */ | |
| export declare const map: { | |
| /** | |
| * Applies a `Struct.Lambda` transformation to every element in a tuple. | |
| * | |
| * **When to use** | |
| * | |
| * Use when you want to apply the same transformation to every tuple element. | |
| * | |
| * **Details** | |
| * | |
| * The lambda lets the compiler track the output type for each element. | |
| * | |
| * **Gotchas** | |
| * | |
| * The lambda must be created with `Struct.lambda`; a plain function will not | |
| * type-check. | |
| * | |
| * **Example** (Wrapping every element in an array) | |
| * | |
| * ```ts | |
| * import { pipe, Struct, Tuple } from "effect" | |
| * | |
| * interface AsArray extends Struct.Lambda { | |
| * <A>(self: A): Array<A> | |
| * readonly "~lambda.out": Array<this["~lambda.in"]> | |
| * } | |
| * | |
| * const asArray = Struct.lambda<AsArray>((a) => [a]) | |
| * const result = pipe(Tuple.make(1, "hello", true), Tuple.map(asArray)) | |
| * console.log(result) // [[1], ["hello"], [true]] | |
| * ``` | |
| * | |
| * @see {@link mapPick} – apply a lambda only to selected indices | |
| * @see {@link mapOmit} – apply a lambda to all indices except selected ones | |
| * @see {@link evolve} – apply different functions to different indices | |
| * @category mapping | |
| * @since 3.9.0 | |
| */ | |
| <L extends Lambda>(lambda: L): <const T extends ReadonlyArray<unknown>>(self: T) => { | |
| [K in keyof T]: Apply<L, T[K]>; | |
| }; | |
| /** | |
| * Applies a `Struct.Lambda` transformation to every element in a tuple. | |
| * | |
| * **When to use** | |
| * | |
| * Use when you want to apply the same transformation to every tuple element. | |
| * | |
| * **Details** | |
| * | |
| * The lambda lets the compiler track the output type for each element. | |
| * | |
| * **Gotchas** | |
| * | |
| * The lambda must be created with `Struct.lambda`; a plain function will not | |
| * type-check. | |
| * | |
| * **Example** (Wrapping every element in an array) | |
| * | |
| * ```ts | |
| * import { pipe, Struct, Tuple } from "effect" | |
| * | |
| * interface AsArray extends Struct.Lambda { | |
| * <A>(self: A): Array<A> | |
| * readonly "~lambda.out": Array<this["~lambda.in"]> | |
| * } | |
| * | |
| * const asArray = Struct.lambda<AsArray>((a) => [a]) | |
| * const result = pipe(Tuple.make(1, "hello", true), Tuple.map(asArray)) | |
| * console.log(result) // [[1], ["hello"], [true]] | |
| * ``` | |
| * | |
| * @see {@link mapPick} – apply a lambda only to selected indices | |
| * @see {@link mapOmit} – apply a lambda to all indices except selected ones | |
| * @see {@link evolve} – apply different functions to different indices | |
| * @category mapping | |
| * @since 3.9.0 | |
| */ | |
| <const T extends ReadonlyArray<unknown>, L extends Lambda>(self: T, lambda: L): { | |
| [K in keyof T]: Apply<L, T[K]>; | |
| }; | |
| }; | |
| /** | |
| * Applies a `Struct.Lambda` transformation only to the elements at the | |
| * specified indices; all other elements are copied unchanged. | |
| * | |
| * **When to use** | |
| * | |
| * Use when you want to apply the same transformation to a subset of | |
| * positions. | |
| * | |
| * **Example** (Wrapping only selected elements in arrays) | |
| * | |
| * ```ts | |
| * import { pipe, Struct, Tuple } from "effect" | |
| * | |
| * interface AsArray extends Struct.Lambda { | |
| * <A>(self: A): Array<A> | |
| * readonly "~lambda.out": Array<this["~lambda.in"]> | |
| * } | |
| * | |
| * const asArray = Struct.lambda<AsArray>((a) => [a]) | |
| * const result = pipe( | |
| * Tuple.make(1, "hello", true), | |
| * Tuple.mapPick([0, 2], asArray) | |
| * ) | |
| * console.log(result) // [[1], "hello", [true]] | |
| * ``` | |
| * | |
| * @see {@link map} – apply a lambda to all elements | |
| * @see {@link mapOmit} – apply a lambda to all elements except selected ones | |
| * @category mapping | |
| * @since 4.0.0 | |
| */ | |
| export declare const mapPick: { | |
| /** | |
| * Applies a `Struct.Lambda` transformation only to the elements at the | |
| * specified indices; all other elements are copied unchanged. | |
| * | |
| * **When to use** | |
| * | |
| * Use when you want to apply the same transformation to a subset of | |
| * positions. | |
| * | |
| * **Example** (Wrapping only selected elements in arrays) | |
| * | |
| * ```ts | |
| * import { pipe, Struct, Tuple } from "effect" | |
| * | |
| * interface AsArray extends Struct.Lambda { | |
| * <A>(self: A): Array<A> | |
| * readonly "~lambda.out": Array<this["~lambda.in"]> | |
| * } | |
| * | |
| * const asArray = Struct.lambda<AsArray>((a) => [a]) | |
| * const result = pipe( | |
| * Tuple.make(1, "hello", true), | |
| * Tuple.mapPick([0, 2], asArray) | |
| * ) | |
| * console.log(result) // [[1], "hello", [true]] | |
| * ``` | |
| * | |
| * @see {@link map} – apply a lambda to all elements | |
| * @see {@link mapOmit} – apply a lambda to all elements except selected ones | |
| * @category mapping | |
| * @since 4.0.0 | |
| */ | |
| <const T extends ReadonlyArray<unknown>, const I extends ReadonlyArray<Indices<T>>, L extends Lambda>(indices: I, lambda: L): (self: T) => { | |
| [K in keyof T]: K extends `${I[number]}` ? Apply<L, T[K]> : T[K]; | |
| }; | |
| /** | |
| * Applies a `Struct.Lambda` transformation only to the elements at the | |
| * specified indices; all other elements are copied unchanged. | |
| * | |
| * **When to use** | |
| * | |
| * Use when you want to apply the same transformation to a subset of | |
| * positions. | |
| * | |
| * **Example** (Wrapping only selected elements in arrays) | |
| * | |
| * ```ts | |
| * import { pipe, Struct, Tuple } from "effect" | |
| * | |
| * interface AsArray extends Struct.Lambda { | |
| * <A>(self: A): Array<A> | |
| * readonly "~lambda.out": Array<this["~lambda.in"]> | |
| * } | |
| * | |
| * const asArray = Struct.lambda<AsArray>((a) => [a]) | |
| * const result = pipe( | |
| * Tuple.make(1, "hello", true), | |
| * Tuple.mapPick([0, 2], asArray) | |
| * ) | |
| * console.log(result) // [[1], "hello", [true]] | |
| * ``` | |
| * | |
| * @see {@link map} – apply a lambda to all elements | |
| * @see {@link mapOmit} – apply a lambda to all elements except selected ones | |
| * @category mapping | |
| * @since 4.0.0 | |
| */ | |
| <const T extends ReadonlyArray<unknown>, const I extends ReadonlyArray<Indices<T>>, L extends Lambda>(self: T, indices: I, lambda: L): { | |
| [K in keyof T]: K extends `${I[number]}` ? Apply<L, T[K]> : T[K]; | |
| }; | |
| }; | |
| /** | |
| * Applies a `Struct.Lambda` transformation to all elements except those at the | |
| * specified indices; the excluded elements are copied unchanged. | |
| * | |
| * **When to use** | |
| * | |
| * Use when most elements should be transformed but a few should be | |
| * preserved. | |
| * | |
| * **Example** (Wrapping all elements except one in arrays) | |
| * | |
| * ```ts | |
| * import { pipe, Struct, Tuple } from "effect" | |
| * | |
| * interface AsArray extends Struct.Lambda { | |
| * <A>(self: A): Array<A> | |
| * readonly "~lambda.out": Array<this["~lambda.in"]> | |
| * } | |
| * | |
| * const asArray = Struct.lambda<AsArray>((a) => [a]) | |
| * const result = pipe( | |
| * Tuple.make(1, "hello", true), | |
| * Tuple.mapOmit([1], asArray) | |
| * ) | |
| * console.log(result) // [[1], "hello", [true]] | |
| * ``` | |
| * | |
| * @see {@link map} – apply a lambda to all elements | |
| * @see {@link mapPick} – apply a lambda only to selected indices | |
| * @category mapping | |
| * @since 4.0.0 | |
| */ | |
| export declare const mapOmit: { | |
| /** | |
| * Applies a `Struct.Lambda` transformation to all elements except those at the | |
| * specified indices; the excluded elements are copied unchanged. | |
| * | |
| * **When to use** | |
| * | |
| * Use when most elements should be transformed but a few should be | |
| * preserved. | |
| * | |
| * **Example** (Wrapping all elements except one in arrays) | |
| * | |
| * ```ts | |
| * import { pipe, Struct, Tuple } from "effect" | |
| * | |
| * interface AsArray extends Struct.Lambda { | |
| * <A>(self: A): Array<A> | |
| * readonly "~lambda.out": Array<this["~lambda.in"]> | |
| * } | |
| * | |
| * const asArray = Struct.lambda<AsArray>((a) => [a]) | |
| * const result = pipe( | |
| * Tuple.make(1, "hello", true), | |
| * Tuple.mapOmit([1], asArray) | |
| * ) | |
| * console.log(result) // [[1], "hello", [true]] | |
| * ``` | |
| * | |
| * @see {@link map} – apply a lambda to all elements | |
| * @see {@link mapPick} – apply a lambda only to selected indices | |
| * @category mapping | |
| * @since 4.0.0 | |
| */ | |
| <const T extends ReadonlyArray<unknown>, const I extends ReadonlyArray<Indices<T>>, L extends Lambda>(indices: I, lambda: L): (self: T) => { | |
| [K in keyof T]: K extends `${I[number]}` ? T[K] : Apply<L, T[K]>; | |
| }; | |
| /** | |
| * Applies a `Struct.Lambda` transformation to all elements except those at the | |
| * specified indices; the excluded elements are copied unchanged. | |
| * | |
| * **When to use** | |
| * | |
| * Use when most elements should be transformed but a few should be | |
| * preserved. | |
| * | |
| * **Example** (Wrapping all elements except one in arrays) | |
| * | |
| * ```ts | |
| * import { pipe, Struct, Tuple } from "effect" | |
| * | |
| * interface AsArray extends Struct.Lambda { | |
| * <A>(self: A): Array<A> | |
| * readonly "~lambda.out": Array<this["~lambda.in"]> | |
| * } | |
| * | |
| * const asArray = Struct.lambda<AsArray>((a) => [a]) | |
| * const result = pipe( | |
| * Tuple.make(1, "hello", true), | |
| * Tuple.mapOmit([1], asArray) | |
| * ) | |
| * console.log(result) // [[1], "hello", [true]] | |
| * ``` | |
| * | |
| * @see {@link map} – apply a lambda to all elements | |
| * @see {@link mapPick} – apply a lambda only to selected indices | |
| * @category mapping | |
| * @since 4.0.0 | |
| */ | |
| <const T extends ReadonlyArray<unknown>, const I extends ReadonlyArray<Indices<T>>, L extends Lambda>(self: T, indices: I, lambda: L): { | |
| [K in keyof T]: K extends `${I[number]}` ? T[K] : Apply<L, T[K]>; | |
| }; | |
| }; | |
| /** | |
| * Creates an `Equivalence` for tuples by comparing corresponding elements | |
| * using the provided per-position `Equivalence`s. Two tuples are equivalent | |
| * when all their corresponding elements are equivalent. | |
| * | |
| * **When to use** | |
| * | |
| * Use when you need an `Equivalence` to compare tuples element-by-element. | |
| * | |
| * **Details** | |
| * | |
| * This is an alias of `Equivalence.Tuple`. | |
| * | |
| * **Example** (Comparing tuples for equivalence) | |
| * | |
| * ```ts | |
| * import { Equivalence, Tuple } from "effect" | |
| * | |
| * const eq = Tuple.makeEquivalence([ | |
| * Equivalence.strictEqual<string>(), | |
| * Equivalence.strictEqual<number>() | |
| * ]) | |
| * | |
| * console.log(eq(["Alice", 30], ["Alice", 30])) // true | |
| * console.log(eq(["Alice", 30], ["Bob", 30])) // false | |
| * ``` | |
| * | |
| * @see {@link makeOrder} – create an `Order` for tuples | |
| * @category instances | |
| * @since 4.0.0 | |
| */ | |
| export declare const makeEquivalence: typeof Equivalence.Tuple; | |
| /** | |
| * Creates an `Order` for tuples by comparing corresponding elements using the | |
| * provided per-position `Order`s. Elements are compared left-to-right; the | |
| * first non-zero comparison determines the result. | |
| * | |
| * **When to use** | |
| * | |
| * Use when you need to sort fixed-position arrays lexicographically, with each | |
| * position using its own ordering rule. | |
| * | |
| * **Details** | |
| * | |
| * This is an alias of `Order.Tuple`. | |
| * | |
| * **Example** (Ordering tuples) | |
| * | |
| * ```ts | |
| * import { Number, String, Tuple } from "effect" | |
| * | |
| * const ord = Tuple.makeOrder([String.Order, Number.Order]) | |
| * | |
| * console.log(ord(["Alice", 30], ["Bob", 25])) // -1 | |
| * console.log(ord(["Alice", 30], ["Alice", 30])) // 0 | |
| * ``` | |
| * | |
| * @see {@link makeEquivalence} – create an `Equivalence` for tuples | |
| * @category ordering | |
| * @since 4.0.0 | |
| */ | |
| export declare const makeOrder: typeof order.Tuple; | |
| export { | |
| /** | |
| * Checks whether an array has exactly `N` elements, narrowing the type to a | |
| * fixed-length tuple. | |
| * | |
| * **When to use** | |
| * | |
| * Use to guard that an array has exactly the tuple length expected at | |
| * runtime. | |
| * | |
| * **Details** | |
| * | |
| * This is a re-export of `Predicate.isTupleOf`. It narrows the type to | |
| * `TupleOf<N, T>` in the truthy branch. | |
| * | |
| * **Gotchas** | |
| * | |
| * This only checks `.length`; it does not validate element types. | |
| * | |
| * **Example** (Checking exact length) | |
| * | |
| * ```ts | |
| * import { Tuple } from "effect" | |
| * | |
| * const arr: Array<number> = [1, 2, 3] | |
| * if (Tuple.isTupleOf(arr, 3)) { | |
| * console.log(arr) | |
| * // ^? [number, number, number] | |
| * } | |
| * ``` | |
| * | |
| * @see `isTupleOfAtLeast` – check for a minimum length | |
| * @category guards | |
| * @since 3.3.0 | |
| */ | |
| isTupleOf, | |
| /** | |
| * Checks whether an array has at least `N` elements, narrowing the type to a | |
| * tuple with a minimum length. | |
| * | |
| * **When to use** | |
| * | |
| * Use to guard that an array has at least the tuple length expected at | |
| * runtime. | |
| * | |
| * **Details** | |
| * | |
| * This is a re-export of `Predicate.isTupleOfAtLeast`. It narrows the type to | |
| * `TupleOfAtLeast<N, T>` in the truthy branch. | |
| * | |
| * **Gotchas** | |
| * | |
| * This only checks `.length`; it does not validate element types. | |
| * | |
| * **Example** (Checking minimum length) | |
| * | |
| * ```ts | |
| * import { Tuple } from "effect" | |
| * | |
| * const arr: Array<number> = [1, 2, 3, 4] | |
| * if (Tuple.isTupleOfAtLeast(arr, 3)) { | |
| * console.log(arr) | |
| * // ^? [number, number, number, ...number[]] | |
| * } | |
| * ``` | |
| * | |
| * @see `isTupleOf` – check for an exact length | |
| * @category guards | |
| * @since 3.3.0 | |
| */ | |
| isTupleOfAtLeast } from "./Predicate.ts"; | |
| /** | |
| * Creates a `Combiner` for a tuple shape by providing a `Combiner` for each | |
| * position. When two tuples are combined, each element is merged using its | |
| * corresponding combiner. | |
| * | |
| * **When to use** | |
| * | |
| * Use when you need to merge two same-shape tuples by combining each position | |
| * independently, such as summing counters or concatenating strings. | |
| * | |
| * **Example** (Combining tuple elements) | |
| * | |
| * ```ts | |
| * import { Number, String, Tuple } from "effect" | |
| * | |
| * const C = Tuple.makeCombiner<readonly [number, string]>([ | |
| * Number.ReducerSum, | |
| * String.ReducerConcat | |
| * ]) | |
| * | |
| * const result = C.combine([1, "hello"], [2, " world"]) | |
| * console.log(result) // [3, "hello world"] | |
| * ``` | |
| * | |
| * @see {@link makeReducer} – like `makeCombiner` but with an initial value | |
| * @category combining | |
| * @since 4.0.0 | |
| */ | |
| export declare function makeCombiner<A extends ReadonlyArray<unknown>>(combiners: { | |
| readonly [K in keyof A]: Combiner.Combiner<A[K]>; | |
| }): Combiner.Combiner<A>; | |
| /** | |
| * Creates a `Reducer` for a tuple shape by providing a `Reducer` for each | |
| * position. The initial value is derived from each position's | |
| * `Reducer.initialValue`. When reducing a collection of tuples, each element | |
| * is combined independently. | |
| * | |
| * **When to use** | |
| * | |
| * Use when you need to fold same-shape tuples by accumulating each position | |
| * independently into one summary tuple. | |
| * | |
| * **Example** (Reducing a collection of tuples) | |
| * | |
| * ```ts | |
| * import { Number, String, Tuple } from "effect" | |
| * | |
| * const R = Tuple.makeReducer<readonly [number, string]>([ | |
| * Number.ReducerSum, | |
| * String.ReducerConcat | |
| * ]) | |
| * | |
| * const result = R.combineAll([ | |
| * [1, "a"], | |
| * [2, "b"], | |
| * [3, "c"] | |
| * ]) | |
| * console.log(result) // [6, "abc"] | |
| * ``` | |
| * | |
| * @see {@link makeCombiner} – like `makeReducer` but without an initial value | |
| * @category folding | |
| * @since 4.0.0 | |
| */ | |
| export declare function makeReducer<A extends ReadonlyArray<unknown>>(reducers: { | |
| readonly [K in keyof A]: Reducer.Reducer<A[K]>; | |
| }): Reducer.Reducer<A>; | |
| //# sourceMappingURL=Tuple.d.ts.map |
Xet Storage Details
- Size:
- 36.6 kB
- Xet hash:
- fd212c94456152f308548b5a3eecad8db9449c155d1ddc398c7a24dbfda36fa8
·
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.