functionalscript
Version:
FunctionalScript is a purely functional subset of JavaScript
23 lines (22 loc) • 1.06 kB
JavaScript
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;