@typed/effects
Version:
Generator-powered Effect management
23 lines • 1.13 kB
TypeScript
import { Resume } from '@typed/env';
import { Maybe } from '@typed/maybe';
import { Capabilities, Effects } from '../Effect';
export declare type FailEnv<K extends PropertyKey, Err> = {
readonly [Key in K]: Fail<Err>;
};
export declare type Fail<Err> = <A>(error: Err) => Resume<Failure<Err, A>>;
export declare const Fail: Fail<any>;
export declare type FailureTypes<E extends Effects<any, any>> = keyof FailuresOf<E>;
export declare type FailuresOf<E extends Effects<any, any>> = Pick<Capabilities<E>, FailureKeys<Capabilities<E>>>;
export declare type ErrorOf<E extends Effects<any, any>, K extends FailureTypes<E>> = FailuresOf<E>[K] extends Fail<infer R> ? R : never;
declare type FailureKeys<A> = {
[K in keyof A]: A[K] extends Fail<any> ? K : never;
}[keyof A];
export declare class Failure<Err, A> {
readonly error: Err;
readonly value: Maybe<A>;
static of: <Err_1, A_1>(error: Err_1, value?: Maybe<A_1>) => Failure<Err_1, A_1>;
constructor(error: Err, value: Maybe<A>);
readonly unpack: <B>(left: (err: Err) => B, right: (value: A) => B) => B;
}
export {};
//# sourceMappingURL=Failure.d.ts.map