UNPKG

@proem/variant

Version:

proem package for handling algebraic data types

43 lines (38 loc) 980 B
'use strict'; 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;