@markandrus/effect-derive
Version:
Derive Covariant (Functor), Foldable, and Traversable instances, as well as base functors, for algebraic data types (ADTs)
13 lines (12 loc) • 1.3 kB
TypeScript
import { type Covariant } from '@effect/typeclass/Covariant';
import { type Kind, type TypeClass, type TypeLambda } from 'effect/HKT';
import { Cofree } from './data/Cofree';
export interface Recursive<T extends TypeLambda, F extends TypeLambda, TR, TO, TE, TA, FR, FO, FE> extends TypeClass<T> {
readonly F: Covariant<F>;
readonly project: (t: Kind<T, TR, TO, TE, TA>) => Kind<F, FR, FO, FE, Kind<T, TR, TO, TE, TA>>;
}
export declare const cata: <T extends TypeLambda, F extends TypeLambda, TR, TO, TE, TA, FR, FO, FE>(T: Recursive<T, F, TR, TO, TE, TA, FR, FO, FE>) => <A>(g: (f: Kind<F, FR, FO, FE, A>) => A) => (t: Kind<T, TR, TO, TE, TA>) => A;
export declare const para: <T extends TypeLambda, F extends TypeLambda, TR, TO, TE, TA, FR, FO, FE>(T: Recursive<T, F, TR, TO, TE, TA, FR, FO, FE>) => <A>(g: (f: Kind<F, FR, FO, FE, [Kind<T, TR, TO, TE, TA>, A]>) => A) => (t: Kind<T, TR, TO, TE, TA>) => A;
type CofreeAlgebra<F extends TypeLambda, FR, FO, FE, WR, WO, WE, A> = (f: Kind<F, FR, FO, FE, Cofree<F, WR, WO, WE, A>>) => A;
export declare const histo: <T extends TypeLambda, F extends TypeLambda, TR, TO, TE, TA, FR, FO, FE>(T: Recursive<T, F, TR, TO, TE, TA, FR, FO, FE>) => <A>(g: CofreeAlgebra<F, FR, FO, FE, FR, FO, FE, A>) => (ta: Kind<T, TR, TO, TE, TA>) => A;
export {};