38 lines
678 B
TypeScript
38 lines
678 B
TypeScript
|
/**
|
||
|
* Mutable references in the `IO` monad
|
||
|
*
|
||
|
* @since 2.0.0
|
||
|
*/
|
||
|
import { IO } from './IO'
|
||
|
/**
|
||
|
* @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
|
||
|
*/
|
||
|
export declare class IORef<A> {
|
||
|
private value
|
||
|
/**
|
||
|
* @since 2.0.0
|
||
|
*/
|
||
|
readonly read: IO<A>
|
||
|
constructor(value: A)
|
||
|
/**
|
||
|
* @since 2.0.0
|
||
|
*/
|
||
|
write(a: A): IO<void>
|
||
|
/**
|
||
|
* @since 2.0.0
|
||
|
*/
|
||
|
modify(f: (a: A) => A): IO<void>
|
||
|
}
|
||
|
/**
|
||
|
* @category constructors
|
||
|
* @since 2.0.0
|
||
|
*/
|
||
|
export declare function newIORef<A>(a: A): IO<IORef<A>>
|