UNPKG

@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
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 {};