UNPKG

@jsoldi/hkt

Version:

Higher kinded types for typescript and a few utility monads.

42 lines 1.5 kB
import { functor } from "../classes/functor.js"; import { monoid } from "../classes/monoid.js"; import { traversable } from "../classes/traversable.js"; import { array } from "./array.js"; import { maybe } from "./maybe.js"; /** The object module, providing a set of functions for working with JavaScript objects. */ export const object = (() => { const rebuild = (fa, f) => { const result = {}; for (const key in fa) { const [value, newKey] = f(fa[key], key); result[newKey] = value; } return result; }; const entries = (fa) => Object.entries(fa); const keys = (fa) => Object.keys(fa); const values = (fa) => Object.values(fa); const map = (fa, f) => rebuild(fa, (a, k) => [f(a, k), k]); const toReader = (fa) => (key) => key in fa ? maybe.just(fa[key]) : maybe.nothing; const fromReader = (keys) => (r) => Object.fromEntries(keys.map(k => [k, r(k)])); return { ...functor({ map }), ...monoid({ empty: () => ({}), append: (a, b) => ({ ...a, ...b }) }), ...traversable({ traverse: (m) => (f) => (ta) => { return m.map(array.traverse(m)(([key, a]) => m.map(f(a), b => [key, b]))(Object.entries(ta)), telas => Object.fromEntries(telas)); } }), toReader, fromReader, map, entries, keys, values, rebuild, }; })(); //# sourceMappingURL=object.js.map