UNPKG

functionalscript

Version:

FunctionalScript is a purely functional subset of JavaScript

23 lines (22 loc) 1.06 kB
import { value, find } from "../btree/find/module.f.js"; import { set } from "../btree/set/module.f.js"; import { remove as btreeRemove } from "../btree/remove/module.f.js"; import { values } from "../btree/module.f.js"; import { cmp } from "../string/module.f.js"; import { fold } from "../list/module.f.js"; const keyCmp = a => ([b]) => cmp(a)(b); export const at = (name) => (map) => { if (map === null) { return null; } const result = value(find(keyCmp(name))(map).first); return result === null ? null : result[1]; }; const setReduceEntry = reduce => entry => set(keyCmp(entry[0]))(old => old === null ? entry : [old[0], reduce(old[1])(entry[1])]); export const setReduce = reduce => name => value => setReduceEntry(reduce)([name, value]); const replace = () => b => b; export const setReplace = name => value => setReduceEntry(replace)([name, value]); export const entries = values; export const fromEntries = fold(setReduceEntry(replace))(null); export const remove = name => btreeRemove(keyCmp(name)); export const empty = null;