<L extends Lambda>(lambda: L): <const T extends ReadonlyArray<unknown>>(
self: T
) => { [K in keyof T]: Apply<L, T[K]> }
<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 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)
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]]export const const map: {
<L extends Lambda>(lambda: L): <
T extends ReadonlyArray<unknown>
>(
self: T
) => {
[K in keyof T]: Apply<L, T[K]>
}
<
T extends ReadonlyArray<unknown>,
L extends Lambda
>(
self: T,
lambda: L
): {
[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)
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]]
map: {
<function (type parameter) L in <L extends Lambda>(lambda: L): <const T extends ReadonlyArray<unknown>>(self: T) => { [K in keyof T]: Apply<L, T[K]>; }L extends import LambdaLambda>(
lambda: L extends Lambdalambda: function (type parameter) L in <L extends Lambda>(lambda: L): <const T extends ReadonlyArray<unknown>>(self: T) => { [K in keyof T]: Apply<L, T[K]>; }L
): <const function (type parameter) T in <const T extends ReadonlyArray<unknown>>(self: T): { [K in keyof T]: Apply<L, T[K]>; }T extends interface ReadonlyArray<T>ReadonlyArray<unknown>>(
self: const T extends ReadonlyArray<unknown>self: function (type parameter) T in <const T extends ReadonlyArray<unknown>>(self: T): { [K in keyof T]: Apply<L, T[K]>; }T
) => { [function (type parameter) KK in keyof function (type parameter) T in <const T extends ReadonlyArray<unknown>>(self: T): { [K in keyof T]: Apply<L, T[K]>; }T]: import ApplyApply<function (type parameter) L in <L extends Lambda>(lambda: L): <const T extends ReadonlyArray<unknown>>(self: T) => { [K in keyof T]: Apply<L, T[K]>; }L, function (type parameter) T in <const T extends ReadonlyArray<unknown>>(self: T): { [K in keyof T]: Apply<L, T[K]>; }T[function (type parameter) KK]> }
<const function (type parameter) T in <const T extends ReadonlyArray<unknown>, L extends Lambda>(self: T, lambda: L): { [K in keyof T]: Apply<L, T[K]>; }T extends interface ReadonlyArray<T>ReadonlyArray<unknown>, function (type parameter) L in <const T extends ReadonlyArray<unknown>, L extends Lambda>(self: T, lambda: L): { [K in keyof T]: Apply<L, T[K]>; }L extends import LambdaLambda>(
self: const T extends ReadonlyArray<unknown>self: function (type parameter) T in <const T extends ReadonlyArray<unknown>, L extends Lambda>(self: T, lambda: L): { [K in keyof T]: Apply<L, T[K]>; }T,
lambda: L extends Lambdalambda: function (type parameter) L in <const T extends ReadonlyArray<unknown>, L extends Lambda>(self: T, lambda: L): { [K in keyof T]: Apply<L, T[K]>; }L
): { [function (type parameter) KK in keyof function (type parameter) T in <const T extends ReadonlyArray<unknown>, L extends Lambda>(self: T, lambda: L): { [K in keyof T]: Apply<L, T[K]>; }T]: import ApplyApply<function (type parameter) L in <const T extends ReadonlyArray<unknown>, L extends Lambda>(self: T, lambda: L): { [K in keyof T]: Apply<L, T[K]>; }L, function (type parameter) T in <const T extends ReadonlyArray<unknown>, L extends Lambda>(self: T, lambda: L): { [K in keyof T]: Apply<L, T[K]>; }T[function (type parameter) KK]> }
} = import dualdual(
2,
<const function (type parameter) T in <const T extends ReadonlyArray<unknown>, L extends Function>(self: T, lambda: L): any[]T extends interface ReadonlyArray<T>ReadonlyArray<unknown>, function (type parameter) L in <const T extends ReadonlyArray<unknown>, L extends Function>(self: T, lambda: L): any[]L extends Function>(self: const T extends ReadonlyArray<unknown>self: function (type parameter) T in <const T extends ReadonlyArray<unknown>, L extends Function>(self: T, lambda: L): any[]T, lambda: L extends Functionlambda: function (type parameter) L in <const T extends ReadonlyArray<unknown>, L extends Function>(self: T, lambda: L): any[]L) => {
return self: const T extends ReadonlyArray<unknown>self.ReadonlyArray<unknown>.map<any>(callbackfn: (value: unknown, index: number, array: readonly unknown[]) => any, thisArg?: any): any[]Calls a defined callback function on each element of an array, and returns an array that contains the results.
map((e: unknowne) => lambda: L extends Functionlambda(e: unknowne))
}
)