UNPKG

@markandrus/effect-derive

Version:

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

19 lines (18 loc) 471 B
import { extract } from './data/Cofree'; export const cata = (T) => (g) => { return function go(t) { return g(T.F.map(T.project(t), go)); }; }; export const para = (T) => (g) => { return function go(t) { return g(T.F.map(T.project(t), _ => [_, go(_)])); }; }; export const histo = (T) => (g) => (ta) => { function go(ta) { const bc = T.F.map(T.project(ta), go); return [g(bc), bc]; } return extract(go(ta)); };