@proem/variant
Version:
proem package for handling algebraic data types
43 lines (38 loc) • 980 B
JavaScript
Object.defineProperty(exports, '__esModule', { value: true });
var array = require('@proem/array');
function tags() {
var tags = [];
for (var _i = 0; _i < arguments.length; _i++) {
tags[_i] = arguments[_i];
}
return tags;
}
function oneOf(variant, tags) {
return array.includes(tags, variant.type);
}
function map(cases, or) {
return function (variant) {
var caseFn = cases[variant.type];
if (!caseFn) {
if (!or) {
throw Error("No match case found for \"" + variant.type + "\"");
}
return or(variant);
}
return caseFn(variant);
};
}
function reducer(caseReducers) {
return function (state, variant) {
var arm = caseReducers[variant.type];
if (!arm) {
return state;
}
return arm(state, variant);
};
}
exports.tags = tags;
exports.oneOf = oneOf;
exports.map = map;
exports.reducer = reducer;
;