UNPKG

effect-ts-laws

Version:
87 lines 5.01 kB
import { Applicative as AP, Covariant as CO, Foldable as FO, Invariant as IN, Of as OF, Traversable as TA } from '@effect/typeclass'; import type { Kind, TypeLambda } from 'effect/HKT'; /** * Compose an `Of` instance by nesting a pair of `Of` instances, the * first on the outside and the second on the inside. * @category composition */ export declare const composeOf: <F extends TypeLambda, G extends TypeLambda, R = never, O = unknown, E = unknown>(F: OF.Of<F>, G: OF.Of<G>) => OF.Of<ComposeTypeLambda<F, G, R, O, E>>; /** * Compose an `Invariant` instance by nesting a pair of `Invariants`s, the * first on the outside and the second on the inside. * @category composition */ export declare const composeInvariant: <F extends TypeLambda, G extends TypeLambda, R = never, O = unknown, E = unknown>(F: IN.Invariant<F>, G: IN.Invariant<G>) => IN.Invariant<ComposeTypeLambda<F, G, R, O, E>>; /** * Compose a `Covariant` instance by nesting a pair of `Covariant`s, the first * on the outside and the second on the inside. * @category composition */ export declare const composeCovariant: <F extends TypeLambda, G extends TypeLambda, R = never, O = unknown, E = unknown>(F: CO.Covariant<F>, G: CO.Covariant<G>) => CO.Covariant<ComposeTypeLambda<F, G, R, O, E>>; /** * Compose a pair of applicatives. Their composition is an applicative of their * nested types. Useful when testing traversable composition laws. * @category composition */ export declare const composeApplicative: <F extends TypeLambda, G extends TypeLambda, R = never, O = unknown, E = unknown>(F: AP.Applicative<F>, G: AP.Applicative<G>) => AP.Applicative<ComposeTypeLambda<F, G, R, O, E>>; /** * Compose a pair of traversables. Their composition is a traversable of their * nested types. * @category composition */ export declare const composeTraversable: <F extends TypeLambda, G extends TypeLambda, R = never, O = unknown, E = unknown>(F: TA.Traversable<F>, G: TA.Traversable<G>) => TA.Traversable<ComposeTypeLambda<F, G, R, O, E>>; /** * Compose a pair of foldables. Their composition is a foldable of their * nested types. * @category composition */ export declare const composeFoldable: <F extends TypeLambda, G extends TypeLambda, R = never, O = unknown, E = unknown>(F: FO.Foldable<F>, G: FO.Foldable<G>) => FO.Foldable<ComposeTypeLambda<F, G>>; /** * A type lambda for a nested pair of type lambdas. Nests the given type lambdas * with the first as the outer layer, and the the second as the inner one. The * kind of a nested type lambda is the nesting of the kinds of the given type * lambdas. For example: * @example * import {ComposeTypeLambda} from 'effect-ts-laws' * import {OptionTypeLambda} from 'effect/Option' * import {Kind} from 'effect/HKT' * import {ReadonlyArrayTypeLambda} from 'effect/Array' * * // A type lambda for the higher-kinded type `Option<ReadonlyArray>`: * export type OptionArrayLambda = ComposeTypeLambda< * OptionTypeLambda, * ReadonlyArrayTypeLambda * > * // Applying the new type lambda to the type `number`: * export type NumericOptionArray = Kind< * OptionArrayLambda, * never, * unknown, * unknown, * number * > * // NumericOptionArray ≡ Option<ReadonlyArray<number>> * @category composition */ export interface ComposeTypeLambda<F extends TypeLambda, G extends TypeLambda, R1 = unknown, O1 = never, E1 = never, R2 = R1, O2 = O1, E2 = E1> extends TypeLambda { readonly type: Kind<F, R1, O1, E1, Kind<G, R2, O2, E2, this['Target']>>; } /** * Map of typeclass name to the function that can compose a pair of the * typeclass instances to create a new instance of the typeclass. * @category composition */ export declare const composeMap: { Of: <F extends TypeLambda, G extends TypeLambda, R = never, O = unknown, E = unknown>(F: OF.Of<F>, G: OF.Of<G>) => OF.Of<ComposeTypeLambda<F, G, R, O, E>>; Invariant: <F extends TypeLambda, G extends TypeLambda, R = never, O = unknown, E = unknown>(F: IN.Invariant<F>, G: IN.Invariant<G>) => IN.Invariant<ComposeTypeLambda<F, G, R, O, E>>; Covariant: <F extends TypeLambda, G extends TypeLambda, R = never, O = unknown, E = unknown>(F: CO.Covariant<F>, G: CO.Covariant<G>) => CO.Covariant<ComposeTypeLambda<F, G, R, O, E>>; Applicative: <F extends TypeLambda, G extends TypeLambda, R = never, O = unknown, E = unknown>(F: AP.Applicative<F>, G: AP.Applicative<G>) => AP.Applicative<ComposeTypeLambda<F, G, R, O, E>>; Foldable: <F extends TypeLambda, G extends TypeLambda, R = never, O = unknown, E = unknown>(F: FO.Foldable<F>, G: FO.Foldable<G>) => FO.Foldable<ComposeTypeLambda<F, G>>; Traversable: <F extends TypeLambda, G extends TypeLambda, R = never, O = unknown, E = unknown>(F: TA.Traversable<F>, G: TA.Traversable<G>) => TA.Traversable<ComposeTypeLambda<F, G, R, O, E>>; }; /** * Literal string union of typeclasses with a `compose*` function. * @category composition */ export type ComposeKey = keyof typeof composeMap; //# sourceMappingURL=compose.d.ts.map