@typed/fp
Version:
Data Structures and Resources for fp-ts
50 lines • 1.51 kB
JavaScript
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