effect-ts-laws
Version:
effect-ts law testing using fast-check.
87 lines • 5.01 kB
TypeScript
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