pragmatic-fp-ts
Version:
Opinionated functional programming library with easy use in mind
48 lines (47 loc) • 2.23 kB
TypeScript
import { Effect, Mappable, Predicate } from "./main";
import { Monad, MonadType } from "./types";
export type Either<R, L = Error> = Left<R, L> | Right<R, L>;
export type EitherMatcher<R, L, B> = {
left?: (err: L) => B;
right?: (val: R) => B;
};
export declare class Left<R, L = Error> extends Monad<R> {
readonly errorValue: L;
constructor(errVal: L);
_<B>(_: Mappable<R, B>, _hint?: L): Either<NonNullable<B>, L>;
bind: <B>(_: Mappable<R, B>, _hint?: L) => Either<NonNullable<B>, L>;
bindM<B>(_: Mappable<Monad<R>, Monad<B>>): Either<NonNullable<B>, L>;
filter(_: any, _hint?: L): Either<NonNullable<R>, L>;
effect(_: any): Either<NonNullable<R>, L>;
getValue(): NonNullable<R>;
getValueOr(alt: R): R;
match<B>(matcher: EitherMatcher<R, L, B>): Either<NonNullable<B>, L | Error>;
isLeft(): boolean;
isRight(): boolean;
getReason(): L;
}
export declare class Right<R extends NonNullable<any>, L = Error> extends Monad<R> {
readonly value: R;
constructor(value: R);
_<B>(fn: Mappable<R, B>, hint?: L): Either<NonNullable<B>, L | Error>;
bind: <B>(fn: Mappable<R, B>, hint?: L) => Either<NonNullable<B>, Error | L>;
bindM<B>(fn: Mappable<Monad<R>, Monad<B>>): Either<NonNullable<B>, L | Error>;
filter(fn: Predicate<R>, hint?: L): Either<NonNullable<R>, L | Error>;
effect(fn: Effect<R>): Either<NonNullable<R>, L>;
getValue(): NonNullable<R>;
getValueOr(_: R): R;
match<B>(matcher: EitherMatcher<R, L, B>): Either<NonNullable<B>, L>;
isLeft(): boolean;
isRight(): boolean;
getReason(): void;
}
export declare function left<R, L = Error>(errVal: L): Left<R, L>;
export declare function right<R, L = Error>(value: R): Right<R, L>;
export declare function either<R, L = Error>(value: MonadType<R>, errVal?: L): Either<NonNullable<R>, L | Error>;
export declare function isLeft<R = any, L = Error>(el: unknown): el is Left<R, L>;
export declare function isRight<R = any, L = Error>(el: unknown): el is Right<R, L>;
export declare function isEither<R = any, L = Error>(el: unknown): el is Either<R, L>;
export declare const throwLeftAsError: {
right: (data: any) => any;
left: (reason: Error | string) => any;
};