UNPKG

@typed/fp

Version:

Data Structures and Resources for fp-ts

50 lines 1.51 kB
import { left, right } from 'fp-ts/Either'; import { pipe } from 'fp-ts/function'; import { undisposable } from './Disposable'; import { map, of } from './Env'; import { async, run } from './Resume'; import { make } from './struct'; /** * @since 0.9.2 * @category Constructor */ export const throwError = (key) => (err) => (e) => e[key](err); const createFailEnv = (key, resume) => make(key, (e) => async(() => resume(e))); /** * @since 0.9.2 * @category Combinator */ export const catchErrorW = (key) => (onError) => (env) => (r) => async((resume) => pipe({ ...r, ...createFailEnv(key, (e) => pipe(r, onError(e), run(resume))) }, env, run(resume))); /** * @since 0.9.2 * @category Combinator */ export const catchError = catchErrorW; /** * @since 0.9.2 * @category Combinator */ export const attempt = (key) => (env) => pipe(env, map(right), catchErrorW(key)((e) => of(left(e)))); /** * Creates a Provider for an Error which will throw an Exception. * Reserve this only for *critical* application errors * @since 0.13.4 * @category Environment */ export const criticalExpection = (key) => (f) => createFailEnv(key, undisposable((e) => { throw new Error(f(e)); })); /** * @since 0.9.2 * @category Constructor */ export const named = () => (name) => { return { throw: throwError(name), catchW: catchErrorW(name), catch: catchError(name), attempt: attempt(name), criticalExpection: criticalExpection(name), }; }; //# sourceMappingURL=Fail.js.map