UNPKG

fp-ts-std

Version:

The missing pseudo-standard library for fp-ts.

34 lines (33 loc) 1.04 kB
import * as IO from "fp-ts/IO"; import { constVoid, flow } from "fp-ts/function"; import { pass as _pass, unless as _unless, when as _when } from "./Applicative"; import { until as _until } from "./Monad"; export const once = (f) => { const uncalled = Symbol(); let val = uncalled; return x => { if (val === uncalled) val = f(x); return IO.of(val); }; }; export const whenInvocationCount = (p) => f => { let n = 0; return () => { n++; if (p(n)) f(); }; }; export const execute = (x) => x(); export const when = _when(IO.Applicative); export const unless = _unless(IO.Applicative); export const memoize = (f) => { const empty = Symbol(); let res = empty; return () => (res === empty ? (res = f()) : res); }; export const sequenceArray_ = flow(IO.sequenceArray, IO.map(constVoid)); export const traverseArray_ = f => flow(IO.traverseArray(f), IO.map(constVoid)); export const pass = _pass(IO.Applicative); export const until = _until(IO.Monad);