51 lines
1.2 KiB
JavaScript
51 lines
1.2 KiB
JavaScript
|
"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;
|