pragmatic-fp-ts
Version:
Opinionated functional programming library with easy use in mind
40 lines (39 loc) • 1.63 kB
TypeScript
import { Effect, Mappable, Predicate } from "./main";
import { Monad } from "./types";
export type Maybe<A> = Just<A> | Nothing<A>;
export type MaybeMatcher<A, B> = {
just?: Mappable<NonNullable<A>, B>;
nothing?: () => B;
};
export declare class Nothing<A> extends Monad<A> {
_<B>(_: Mappable<A, B>): Maybe<NonNullable<B>>;
bind: <B>(_: Mappable<A, B>) => Maybe<NonNullable<B>>;
bindM<B>(_: Mappable<Monad<A>, Monad<B>>): Maybe<NonNullable<B>>;
filter(_: any): Maybe<NonNullable<A>>;
effect(_: any): Maybe<NonNullable<A>>;
getValue(): A;
getValueOr(alt: A): A;
match<B>(matcher: MaybeMatcher<A, B>): Maybe<NonNullable<B>>;
isNothing(): boolean;
isJust(): boolean;
}
export declare class Just<A> extends Monad<A> {
readonly value: A;
constructor(value: A);
_<B>(fn: Mappable<A, B>): Maybe<NonNullable<B>>;
bind: <B>(fn: Mappable<A, B>) => Maybe<NonNullable<B>>;
bindM<B>(fn: Mappable<Monad<A>, Monad<B>>): Maybe<NonNullable<B>>;
filter(fn: Predicate<A>): Maybe<NonNullable<A>>;
effect(fn: Effect<A>): Maybe<NonNullable<A>>;
getValue(): NonNullable<A>;
getValueOr(_: A): A;
match<B>(matcher: MaybeMatcher<A, B>): Maybe<NonNullable<B>>;
isNothing(): boolean;
isJust(): boolean;
}
export declare const just: <T>(value: T) => Just<T>;
export declare const nothing: <T>() => Nothing<T>;
export declare const maybe: <U, T = NonNullable<U>>(value: U | Monad<U>) => Maybe<T>;
export declare const isJust: (x: unknown) => boolean;
export declare const isNothing: (x: unknown) => boolean;
export declare const isMaybe: (x: unknown) => boolean;