UNPKG

state-monad-ts

Version:

state monad in typescript

57 lines (56 loc) 1.87 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.State = exports.unit = void 0; exports.unit = null; var State = /** @class */ (function () { function State(runState) { var _this = this; this[Symbol.toStringTag] = "StateMoand"; this.then = this.bind; this.runState = runState; this.execState = function (s) { return _this.runState(s)[1]; }; this.evalState = function (s) { return _this.runState(s)[0]; }; } State.prototype.map = function (f) { var _this = this; var runState = function (s) { var _a = _this.runState(s), a = _a[0], s1 = _a[1]; var b = f(a); return [b, s1]; }; return new State(runState); }; State.pure = function (a) { var runState = function (s) { return [a, s]; }; return new State(runState); }; State.prototype.ap = function (fa) { var _this = this; var runState = function (s) { var _a = fa.runState(s), f = _a[0], s1 = _a[1]; var _b = _this.runState(s1), a = _b[0], s2 = _b[1]; return [f(a), s2]; }; return new State(runState); }; State.prototype.bind = function (f) { var _this = this; var runState = function (s) { var _a = _this.runState(s), a = _a[0], s1 = _a[1]; return f(a).runState(s1); }; return new State(runState); }; State.prototype.get = function () { return this; }; State.prototype.put = function (s) { return new State(function () { return [exports.unit, s]; }); }; State.prototype.modify = function (f) { return new State(function (s) { return [exports.unit, f(s)]; }); }; State.return = State.pure; return State; }()); exports.State = State;