UNPKG

eff

Version:

An extensible effect monad based on the freer monad

69 lines (56 loc) 5.05 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.interpretState = exports.put = exports.modify = exports.get = void 0; var _daggy = _interopRequireDefault(require("daggy")); var _eff = require("./eff.js"); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var State = _daggy.default.taggedSum("State", { get: [], modify: ["modificationFunction"], put: ["newState"] }); var get = function get() { return (0, _eff.send)(State.get); }; exports.get = get; var modify = function modify(modificationFunction) { return (0, _eff.send)(State.modify(modificationFunction)); }; exports.modify = modify; var put = function put(newState) { return (0, _eff.send)(State.put(newState)); }; exports.put = put; var interpretState = function interpretState(startingState) { var state = startingState; return (0, _eff.interpreter)({ predicate: function predicate(x) { return State.is(x); }, handler: function handler(stateEffect) { return stateEffect.cata({ get: function get() { return function (continuation) { return continuation(state); }; }, modify: function modify(modificationFunction) { return function (continuation) { state = modificationFunction(state); return continuation(null); }; }, put: function put(newState) { return function (continuation) { state = newState; return continuation(null); }; } }); } }); }; exports.interpretState = interpretState; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NvdXJjZXMvc3RhdGUuanMiXSwibmFtZXMiOlsiU3RhdGUiLCJkYWdneSIsInRhZ2dlZFN1bSIsImdldCIsIm1vZGlmeSIsInB1dCIsIm1vZGlmaWNhdGlvbkZ1bmN0aW9uIiwibmV3U3RhdGUiLCJpbnRlcnByZXRTdGF0ZSIsInN0YXJ0aW5nU3RhdGUiLCJzdGF0ZSIsInByZWRpY2F0ZSIsIngiLCJpcyIsImhhbmRsZXIiLCJzdGF0ZUVmZmVjdCIsImNhdGEiLCJjb250aW51YXRpb24iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFFQTs7QUFFQTs7OztBQUVBLElBQU1BLEtBQUssR0FBR0MsZUFBTUMsU0FBTixDQUFnQixPQUFoQixFQUF5QjtBQUN0Q0MsRUFBQUEsR0FBRyxFQUFFLEVBRGlDO0FBRXRDQyxFQUFBQSxNQUFNLEVBQUUsQ0FBQyxzQkFBRCxDQUY4QjtBQUd0Q0MsRUFBQUEsR0FBRyxFQUFFLENBQUMsVUFBRDtBQUhpQyxDQUF6QixDQUFkOztBQU1PLElBQU1GLEdBQUcsR0FBRyxTQUFOQSxHQUFNO0FBQUEsU0FBTSxlQUFLSCxLQUFLLENBQUNHLEdBQVgsQ0FBTjtBQUFBLENBQVo7Ozs7QUFDQSxJQUFNQyxNQUFNLEdBQUcsU0FBVEEsTUFBUyxDQUFDRSxvQkFBRDtBQUFBLFNBQ3JCLGVBQUtOLEtBQUssQ0FBQ0ksTUFBTixDQUFhRSxvQkFBYixDQUFMLENBRHFCO0FBQUEsQ0FBZjs7OztBQUVBLElBQU1ELEdBQUcsR0FBRyxTQUFOQSxHQUFNLENBQUNFLFFBQUQ7QUFBQSxTQUFxQixlQUFLUCxLQUFLLENBQUNLLEdBQU4sQ0FBVUUsUUFBVixDQUFMLENBQXJCO0FBQUEsQ0FBWjs7OztBQUVBLElBQU1DLGNBQWMsR0FBRyxTQUFqQkEsY0FBaUIsQ0FBQ0MsYUFBRCxFQUEwQjtBQUN2RCxNQUFJQyxLQUFLLEdBQUdELGFBQVo7QUFFQSxTQUFPLHNCQUFZO0FBQ2xCRSxJQUFBQSxTQUFTLEVBQUUsbUJBQUFDLENBQUM7QUFBQSxhQUFJWixLQUFLLENBQUNhLEVBQU4sQ0FBU0QsQ0FBVCxDQUFKO0FBQUEsS0FETTtBQUVsQkUsSUFBQUEsT0FBTyxFQUFFLGlCQUFBQyxXQUFXO0FBQUEsYUFDbkJBLFdBQVcsQ0FBQ0MsSUFBWixDQUFpQjtBQUNoQmIsUUFBQUEsR0FBRyxFQUFFO0FBQUEsaUJBQU0sVUFBQWMsWUFBWTtBQUFBLG1CQUFJQSxZQUFZLENBQUNQLEtBQUQsQ0FBaEI7QUFBQSxXQUFsQjtBQUFBLFNBRFc7QUFFaEJOLFFBQUFBLE1BQU0sRUFBRSxnQkFBQUUsb0JBQW9CO0FBQUEsaUJBQUksVUFBQVcsWUFBWSxFQUFJO0FBQy9DUCxZQUFBQSxLQUFLLEdBQUdKLG9CQUFvQixDQUFDSSxLQUFELENBQTVCO0FBQ0EsbUJBQU9PLFlBQVksQ0FBQyxJQUFELENBQW5CO0FBQ0EsV0FIMkI7QUFBQSxTQUZaO0FBTWhCWixRQUFBQSxHQUFHLEVBQUUsYUFBQUUsUUFBUTtBQUFBLGlCQUFJLFVBQUFVLFlBQVksRUFBSTtBQUNoQ1AsWUFBQUEsS0FBSyxHQUFHSCxRQUFSO0FBQ0EsbUJBQU9VLFlBQVksQ0FBQyxJQUFELENBQW5CO0FBQ0EsV0FIWTtBQUFBO0FBTkcsT0FBakIsQ0FEbUI7QUFBQTtBQUZGLEdBQVosQ0FBUDtBQWVBLENBbEJNIiwic291cmNlc0NvbnRlbnQiOlsiLyogQGZsb3cgKi9cblxuaW1wb3J0IGRhZ2d5IGZyb20gXCJkYWdneVwiO1xuXG5pbXBvcnQgeyBpbnRlcnByZXRlciwgc2VuZCB9IGZyb20gXCIuL2VmZi5qc1wiO1xuXG5jb25zdCBTdGF0ZSA9IGRhZ2d5LnRhZ2dlZFN1bShcIlN0YXRlXCIsIHtcblx0Z2V0OiBbXSxcblx0bW9kaWZ5OiBbXCJtb2RpZmljYXRpb25GdW5jdGlvblwiXSxcblx0cHV0OiBbXCJuZXdTdGF0ZVwiXSxcbn0pO1xuXG5leHBvcnQgY29uc3QgZ2V0ID0gKCkgPT4gc2VuZChTdGF0ZS5nZXQpO1xuZXhwb3J0IGNvbnN0IG1vZGlmeSA9IChtb2RpZmljYXRpb25GdW5jdGlvbjogYW55ID0+IGFueSkgPT5cblx0c2VuZChTdGF0ZS5tb2RpZnkobW9kaWZpY2F0aW9uRnVuY3Rpb24pKTtcbmV4cG9ydCBjb25zdCBwdXQgPSAobmV3U3RhdGU6IG1peGVkKSA9PiBzZW5kKFN0YXRlLnB1dChuZXdTdGF0ZSkpO1xuXG5leHBvcnQgY29uc3QgaW50ZXJwcmV0U3RhdGUgPSAoc3RhcnRpbmdTdGF0ZTogbWl4ZWQpID0+IHtcblx0bGV0IHN0YXRlID0gc3RhcnRpbmdTdGF0ZTtcblxuXHRyZXR1cm4gaW50ZXJwcmV0ZXIoe1xuXHRcdHByZWRpY2F0ZTogeCA9PiBTdGF0ZS5pcyh4KSxcblx0XHRoYW5kbGVyOiBzdGF0ZUVmZmVjdCA9PlxuXHRcdFx0c3RhdGVFZmZlY3QuY2F0YSh7XG5cdFx0XHRcdGdldDogKCkgPT4gY29udGludWF0aW9uID0+IGNvbnRpbnVhdGlvbihzdGF0ZSksXG5cdFx0XHRcdG1vZGlmeTogbW9kaWZpY2F0aW9uRnVuY3Rpb24gPT4gY29udGludWF0aW9uID0+IHtcblx0XHRcdFx0XHRzdGF0ZSA9IG1vZGlmaWNhdGlvbkZ1bmN0aW9uKHN0YXRlKTtcblx0XHRcdFx0XHRyZXR1cm4gY29udGludWF0aW9uKG51bGwpO1xuXHRcdFx0XHR9LFxuXHRcdFx0XHRwdXQ6IG5ld1N0YXRlID0+IGNvbnRpbnVhdGlvbiA9PiB7XG5cdFx0XHRcdFx0c3RhdGUgPSBuZXdTdGF0ZTtcblx0XHRcdFx0XHRyZXR1cm4gY29udGludWF0aW9uKG51bGwpO1xuXHRcdFx0XHR9LFxuXHRcdFx0fSksXG5cdH0pO1xufTtcbiJdfQ==