import { WhenNever, Cata } from '../Basics'; import Either from '../Either'; export interface Maybe { isNothing(): boolean; isJust(): boolean; isEqual(another: Maybe>): boolean; map(fn: (value: T) => R): Maybe; chain(fn: (value: T) => Maybe): Maybe; filter(fn: (value: WhenNever) => boolean): Maybe>; orElse(fn: () => Maybe>): Maybe>; getOrElse(defaults: WhenNever): WhenNever; fold(onNothing: () => R, onJust: (value: T) => R): R; cata(pattern: Pattern): R; toEither(error: E): Either; tap(fn: (that: Maybe) => R): R; } export declare namespace Maybe { type Pattern = Cata<{ Nothing(): R; Just(value: T): R; }>; const Nothing: Maybe; const Just: (value: T) => Maybe; const fromNullable: (value: T | null | undefined) => Maybe; const fromEither: (either: Either) => Maybe; const join: (maybe: Maybe>) => Maybe; const shape: (object: { [K in keyof O]: Maybe; }) => Maybe; const combine: (array: Maybe[]) => Maybe<(unknown extends T ? never : T)[]>; const values: (array: Maybe[]) => (unknown extends T ? never : T)[]; } export declare type Pattern = Maybe.Pattern; export declare const Nothing: Maybe; export declare const Just: (value: T) => Maybe; export declare const fromNullable: (value: T | null | undefined) => Maybe; export declare const fromEither: (either: Either) => Maybe; export declare const join: (maybe: Maybe>) => Maybe; export declare const shape: (object: { [K in keyof O]: Maybe; }) => Maybe; export declare const combine: (array: Maybe[]) => Maybe<(unknown extends T ? never : T)[]>; export declare const values: (array: Maybe[]) => (unknown extends T ? never : T)[]; export default Maybe;