UNPKG

@markandrus/effect-derive

Version:

Derive Covariant (Functor), Foldable, and Traversable instances, as well as base functors, for algebraic data types (ADTs)

10 lines (9 loc) 1.14 kB
import { type Covariant } from '@effect/typeclass/Covariant'; import { type Kind, type TypeLambda } from 'effect/HKT'; export type Cofree<F extends TypeLambda, R, O, E, A> = [A, Kind<F, R, O, E, Cofree<F, R, O, E, A>>]; export declare const unwrap: <F extends TypeLambda, R, O, E, A>(wa: Cofree<F, R, O, E, A>) => Kind<F, R, O, E, Cofree<F, R, O, E, A>>; export declare const extract: <F extends TypeLambda, R, O, E, A>(wa: Cofree<F, R, O, E, A>) => A; export declare const duplicate: <F extends TypeLambda>(F: Covariant<F>) => <R, O, E, A>(self: Cofree<F, R, O, E, A>) => Cofree<F, R, O, E, Cofree<F, R, O, E, A>>; export declare const extend: <F extends TypeLambda>(F: Covariant<F>) => <R, O, E, A, B>(self: Cofree<F, R, O, E, A>, f: (wa: Cofree<F, R, O, E, A>) => B) => Cofree<F, R, O, E, B>; export declare const mapComposition: <F extends TypeLambda>(F: Covariant<F>) => <R, O, E, A, B>(self: Cofree<F, R, O, E, A>, f: (a: A) => B) => Cofree<F, R, O, E, B>; export declare const distHisto: <F extends TypeLambda>(F: Covariant<F>) => <R, O, E, A>(self: Kind<F, R, O, E, Cofree<F, R, O, E, A>>) => Cofree<F, R, O, E, Kind<F, R, O, E, A>>;