eff
Version:
An extensible effect monad based on the freer monad
43 lines (34 loc) • 4.21 kB
JavaScript
;
var _ava = _interopRequireDefault(require("ava"));
var _eff = require("./eff");
var _state = require("./state");
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
_ava.default.cb("Get", function (t) {
var state = "Hello, World!";
var application = (0, _state.get)();
(0, _eff.run)([(0, _state.interpretState)(state)])(function (receivedState) {
t.is(receivedState, state);
t.end();
})(application);
});
_ava.default.cb("Modify", function (t) {
var state = "Hello, World!";
var modification = function modification(x) {
return x + " How are you?";
};
var application = (0, _state.modify)(modification).chain(_state.get);
(0, _eff.run)([(0, _state.interpretState)(state)])(function (receivedState) {
t.is(receivedState, modification(state));
t.end();
})(application);
});
_ava.default.cb("Put", function (t) {
var state = "Hello, World!";
var newState = "World, Hello!";
var application = (0, _state.put)(newState).chain(_state.get);
(0, _eff.run)([(0, _state.interpretState)(state)])(function (receivedState) {
t.is(receivedState, newState);
t.end();
})(application);
});
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NvdXJjZXMvc3RhdGUudGVzdC5qcyJdLCJuYW1lcyI6WyJ0ZXN0IiwiY2IiLCJ0Iiwic3RhdGUiLCJhcHBsaWNhdGlvbiIsInJlY2VpdmVkU3RhdGUiLCJpcyIsImVuZCIsIm1vZGlmaWNhdGlvbiIsIngiLCJjaGFpbiIsImdldCIsIm5ld1N0YXRlIl0sIm1hcHBpbmdzIjoiOztBQUVBOztBQUVBOztBQUNBOzs7O0FBRUFBLGFBQUtDLEVBQUwsQ0FBUSxLQUFSLEVBQWUsVUFBQUMsQ0FBQyxFQUFJO0FBQ25CLE1BQU1DLEtBQUssR0FBRyxlQUFkO0FBRUEsTUFBTUMsV0FBVyxHQUFHLGlCQUFwQjtBQUVBLGdCQUFJLENBQUMsMkJBQWVELEtBQWYsQ0FBRCxDQUFKLEVBQTZCLFVBQUFFLGFBQWEsRUFBSTtBQUM3Q0gsSUFBQUEsQ0FBQyxDQUFDSSxFQUFGLENBQUtELGFBQUwsRUFBb0JGLEtBQXBCO0FBQ0FELElBQUFBLENBQUMsQ0FBQ0ssR0FBRjtBQUNBLEdBSEQsRUFHR0gsV0FISDtBQUlBLENBVEQ7O0FBV0FKLGFBQUtDLEVBQUwsQ0FBUSxRQUFSLEVBQWtCLFVBQUFDLENBQUMsRUFBSTtBQUN0QixNQUFNQyxLQUFLLEdBQUcsZUFBZDs7QUFDQSxNQUFNSyxZQUFZLEdBQUcsU0FBZkEsWUFBZSxDQUFBQyxDQUFDO0FBQUEsV0FBSUEsQ0FBQyxHQUFHLGVBQVI7QUFBQSxHQUF0Qjs7QUFFQSxNQUFNTCxXQUFXLEdBQUcsbUJBQU9JLFlBQVAsRUFBcUJFLEtBQXJCLENBQTJCQyxVQUEzQixDQUFwQjtBQUVBLGdCQUFJLENBQUMsMkJBQWVSLEtBQWYsQ0FBRCxDQUFKLEVBQTZCLFVBQUFFLGFBQWEsRUFBSTtBQUM3Q0gsSUFBQUEsQ0FBQyxDQUFDSSxFQUFGLENBQUtELGFBQUwsRUFBb0JHLFlBQVksQ0FBQ0wsS0FBRCxDQUFoQztBQUNBRCxJQUFBQSxDQUFDLENBQUNLLEdBQUY7QUFDQSxHQUhELEVBR0dILFdBSEg7QUFJQSxDQVZEOztBQVlBSixhQUFLQyxFQUFMLENBQVEsS0FBUixFQUFlLFVBQUFDLENBQUMsRUFBSTtBQUNuQixNQUFNQyxLQUFLLEdBQUcsZUFBZDtBQUNBLE1BQU1TLFFBQVEsR0FBRyxlQUFqQjtBQUVBLE1BQU1SLFdBQVcsR0FBRyxnQkFBSVEsUUFBSixFQUFjRixLQUFkLENBQW9CQyxVQUFwQixDQUFwQjtBQUVBLGdCQUFJLENBQUMsMkJBQWVSLEtBQWYsQ0FBRCxDQUFKLEVBQTZCLFVBQUFFLGFBQWEsRUFBSTtBQUM3Q0gsSUFBQUEsQ0FBQyxDQUFDSSxFQUFGLENBQUtELGFBQUwsRUFBb0JPLFFBQXBCO0FBQ0FWLElBQUFBLENBQUMsQ0FBQ0ssR0FBRjtBQUNBLEdBSEQsRUFHR0gsV0FISDtBQUlBLENBVkQiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBAZmxvdyAqL1xuXG5pbXBvcnQgdGVzdCBmcm9tIFwiYXZhXCI7XG5cbmltcG9ydCB7IHJ1biB9IGZyb20gXCIuL2VmZlwiO1xuaW1wb3J0IHsgZ2V0LCBtb2RpZnksIHB1dCwgaW50ZXJwcmV0U3RhdGUgfSBmcm9tIFwiLi9zdGF0ZVwiO1xuXG50ZXN0LmNiKFwiR2V0XCIsIHQgPT4ge1xuXHRjb25zdCBzdGF0ZSA9IFwiSGVsbG8sIFdvcmxkIVwiO1xuXG5cdGNvbnN0IGFwcGxpY2F0aW9uID0gZ2V0KCk7XG5cblx0cnVuKFtpbnRlcnByZXRTdGF0ZShzdGF0ZSldKShyZWNlaXZlZFN0YXRlID0+IHtcblx0XHR0LmlzKHJlY2VpdmVkU3RhdGUsIHN0YXRlKTtcblx0XHR0LmVuZCgpO1xuXHR9KShhcHBsaWNhdGlvbik7XG59KTtcblxudGVzdC5jYihcIk1vZGlmeVwiLCB0ID0+IHtcblx0Y29uc3Qgc3RhdGUgPSBcIkhlbGxvLCBXb3JsZCFcIjtcblx0Y29uc3QgbW9kaWZpY2F0aW9uID0geCA9PiB4ICsgXCIgSG93IGFyZSB5b3U/XCI7XG5cblx0Y29uc3QgYXBwbGljYXRpb24gPSBtb2RpZnkobW9kaWZpY2F0aW9uKS5jaGFpbihnZXQpO1xuXG5cdHJ1bihbaW50ZXJwcmV0U3RhdGUoc3RhdGUpXSkocmVjZWl2ZWRTdGF0ZSA9PiB7XG5cdFx0dC5pcyhyZWNlaXZlZFN0YXRlLCBtb2RpZmljYXRpb24oc3RhdGUpKTtcblx0XHR0LmVuZCgpO1xuXHR9KShhcHBsaWNhdGlvbik7XG59KTtcblxudGVzdC5jYihcIlB1dFwiLCB0ID0+IHtcblx0Y29uc3Qgc3RhdGUgPSBcIkhlbGxvLCBXb3JsZCFcIjtcblx0Y29uc3QgbmV3U3RhdGUgPSBcIldvcmxkLCBIZWxsbyFcIjtcblxuXHRjb25zdCBhcHBsaWNhdGlvbiA9IHB1dChuZXdTdGF0ZSkuY2hhaW4oZ2V0KTtcblxuXHRydW4oW2ludGVycHJldFN0YXRlKHN0YXRlKV0pKHJlY2VpdmVkU3RhdGUgPT4ge1xuXHRcdHQuaXMocmVjZWl2ZWRTdGF0ZSwgbmV3U3RhdGUpO1xuXHRcdHQuZW5kKCk7XG5cdH0pKGFwcGxpY2F0aW9uKTtcbn0pO1xuIl19