@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
JavaScript
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));
};