declare type MaybeValues = { readonly [k: string]: Maybe; } | readonly Maybe[]; declare type TMaybeAll = { [I in keyof T]: T[I] extends Maybe ? V : never; }; interface Just extends MaybeBase { hasValue: true; value: T; } interface Nothing extends MaybeBase { hasValue: false; error: Error; } export declare type Maybe = Just | Nothing; declare class MaybeBase { private readonly data; private static readonly defaultError; private constructor(); static just(value: T): Maybe; static nothing(error?: Error): Maybe; get hasValue(): boolean; get value(): T | undefined; get error(): Error | undefined; static all(maybes: T): Maybe>; static any(maybes: Maybe[]): T[]; read(ifValue: (left: T) => R): R | void; read(ifValue: (left: T) => R, ifNothing: (error: Error) => R): R; bind(next: (value: T) => Maybe): Maybe; map(next: (value: T) => R): Maybe; or(right: Maybe): Maybe; else(getAlt: (error: Error) => R): T | R; elseThrow(getError?: (error: Error) => Error): T; } export declare const Maybe: typeof MaybeBase; export {};