@proem/variant
Version:
proem package for handling algebraic data types
33 lines • 872 B
JavaScript
import * as array from '@proem/array';
export function tags() {
var tags = [];
for (var _i = 0; _i < arguments.length; _i++) {
tags[_i] = arguments[_i];
}
return tags;
}
export function oneOf(variant, tags) {
return array.includes(tags, variant.type);
}
export 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);
};
}
export function reducer(caseReducers) {
return function (state, variant) {
var arm = caseReducers[variant.type];
if (!arm) {
return state;
}
return arm(state, variant);
};
}
//# sourceMappingURL=index.js.map