import type { Kind, TypeLambda } from "effect/HKT"; import type { Covariant } from "./Covariant.js"; import type { Invariant } from "./Invariant.js"; import type { SemiApplicative } from "./SemiApplicative.js"; /** * @category type class * @since 0.24.0 */ export interface SemiProduct extends Invariant { readonly product: (self: Kind, that: Kind) => Kind; readonly productMany: (self: Kind, collection: Iterable>) => Kind]>; } /** * Returns a default `productMany` implementation. * * @category constructors * @since 0.24.0 */ export declare const productMany: (map: Covariant["map"], product: SemiProduct["product"]) => SemiProduct["productMany"]; /** * Returns a default `product` composition. * * @since 0.24.0 */ export declare const productComposition: (F: SemiApplicative, G: SemiProduct) => (self: Kind>, that: Kind>) => Kind>; /** * Returns a default `productMany` composition. * * @since 0.24.0 */ export declare const productManyComposition: (F: SemiApplicative, G: SemiProduct) => (self: Kind>, collection: Iterable>>) => Kind]>>; /** * @category do notation * @since 0.24.0 */ export declare const andThenBind: (F: SemiProduct) => { (name: Exclude, that: Kind): (self: Kind) => Kind; (self: Kind, name: Exclude, that: Kind): Kind; }; /** * Appends an element to the end of a tuple. * * @since 0.24.0 */ export declare const appendElement: (F: SemiProduct) => { (that: Kind): >(self: Kind) => Kind; , R2, O2_1, E2_1, B_1>(self: Kind, that: Kind): Kind; }; /** * @since 0.24.0 */ export declare const nonEmptyTuple: (F: SemiProduct) => , ...Array>]>(...elements: T) => Kind] ? R : never), ([T[number]] extends [Kind] ? O : never), ([T[number]] extends [Kind] ? E : never), { [I in keyof T]: [T[I]] extends [Kind] ? A : never; }>; type EnforceNonEmptyRecord = keyof R extends never ? never : R; /** * @since 0.24.0 */ export declare const nonEmptyStruct: (F: SemiProduct) => ; }>(fields: EnforceNonEmptyRecord & { readonly [x: string]: Kind; }) => Kind] ? R_1 : never), ([R[keyof R]] extends [Kind] ? O : never), ([R[keyof R]] extends [Kind] ? E : never), { [K in keyof R]: [R[K]] extends [Kind] ? A : never; }>; export {}; //# sourceMappingURL=SemiProduct.d.ts.map