"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.newIORef = exports.IORef = void 0; /** * @example * import { io } from 'fp-ts/IO' * import { newIORef } from 'fp-ts/IORef' * * assert.strictEqual(io.chain(newIORef(1), ref => io.chain(ref.write(2), () => ref.read))(), 2) * * @category model * @since 2.0.0 */ var IORef = /** @class */ (function () { function IORef(value) { var _this = this; this.value = value; this.read = function () { return _this.value; }; this.write = this.write.bind(this); this.modify = this.modify.bind(this); } /** * @since 2.0.0 */ IORef.prototype.write = function (a) { var _this = this; return function () { _this.value = a; }; }; /** * @since 2.0.0 */ IORef.prototype.modify = function (f) { var _this = this; return function () { _this.value = f(_this.value); }; }; return IORef; }()); exports.IORef = IORef; /** * @category constructors * @since 2.0.0 */ function newIORef(a) { return function () { return new IORef(a); }; } exports.newIORef = newIORef;