crocks
Version:
A collection of well known Algebraic Datatypes for your utter enjoyment.
56 lines (45 loc) • 1.06 kB
JavaScript
/** @license ISC License (c) copyright 2017 original and current authors */
/** @author Ian Hofmann-Hicks (evil) */
function rejectUnit(obj) {
return function(acc, key) {
var value = obj[key]
if(value !== undefined) {
acc[key] = value
}
return acc
}
}
function assign(x, m) {
var result = Object.keys(m).reduce(rejectUnit(m), {})
return Object.keys(x).reduce(rejectUnit(x), result)
}
function filter(f, m) {
return Object.keys(m).reduce(function (acc, key) {
if(f(m[key])) {
acc[key] = m[key]
}
return acc
}, {})
}
function map(f, m) {
return Object.keys(m).reduce(function (acc, key) {
acc[key] = f(m[key])
return acc
}, {})
}
function set(key, val, m) {
var obj;
return assign(( obj = {}, obj[key] = val, obj ), m)
}
function unset(key, m) {
return Object.keys(m).reduce(function (acc, k) {
if(m[k] !== undefined && k !== key) {
acc[k] = m[k]
}
return acc
}, {})
}
module.exports = {
assign: assign, filter: filter,
map: map, set: set, unset: unset
}