fp-ts-std
Version:
The missing pseudo-standard library for fp-ts.
34 lines (33 loc) • 1.04 kB
JavaScript
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);