Skip to content
Effect Days 2026 Get your ticket

Product

3 exports Added in v0.24.0 Source

Other

struct

Added in v0.24.0 Source

Signature

declare function struct<F extends TypeLambda>(F: Product<F>): <R extends {
[x: string]: Kind<F, any, any, any, any>;
}>(fields: R) => Kind<F, [R[keyof R]] extends [Kind<F, R, any, any, any>] ? R : never, R[keyof R] extends never ? never : [R[keyof R]] extends [Kind<F, any, O, any, any>] ? O : never, R[keyof R] extends never ? never : [R[keyof R]] extends [Kind<F, any, any, E, any>] ? E : never, { [K in string | number | symbol]: [R[K]] extends [Kind<F, any, any, any, A>] ? A : never }>

tuple

Added in v0.24.0 Source

Signature

declare function tuple<F extends TypeLambda>(F: Product<F>): <T extends readonly Array<Kind<F, any, any, any, any>>>(...elements: T) => Kind<F, [T[number]] extends [Kind<F, R, any, any, any>] ? R : never, T[number] extends never ? never : [T[number]] extends [Kind<F, any, O, any, any>] ? O : never, T[number] extends never ? never : [T[number]] extends [Kind<F, any, any, E, any>] ? E : never, { [I in string | number | symbol]: [T[I]] extends [Kind<F, any, any, any, A>] ? A : never }>

Type Class

Product interface

Added in v0.24.0 Source

Signature

interface Product<F extends TypeLambda> extends SemiProduct<F>, Of<F> {
readonly productAll: <R, O, E, A>(collection: Iterable<Kind<F, R, O, E, A>>) => Kind<F, R, O, E, Array<A>>;
}