import { Monad, FunctorFunc, ApplicativeFunc } from "./interfaces"; import { Either } from "./either"; export declare abstract class Maybe implements Monad { abstract map(f: (a: T) => U): Maybe; abstract fmap(f: FunctorFunc): Maybe; abstract applies(f: ApplicativeFunc): (mb: Maybe) => Maybe; abstract mbind(f: Maybe>): Maybe; abstract flatten(): Maybe; abstract get(): T | never; abstract getOrElse(f: () => T): T; abstract getOrElseGet(value: T): T; abstract getOrThrow(err?: Error): T | never; abstract orElse(o: () => Maybe): Maybe; abstract toObject(): { just: T | null; }; isDefined(): boolean; isEmpty(): boolean; toEither(): Either; equals(other: Maybe): boolean; toJSON(): { just: T | null; }; toString(): string; } export declare namespace Maybe { function just(value: T): Just; function none(): None; function nothing(): None; function fromNull(value: T | undefined | null): Maybe; function sequence(...maybes: Array>): Maybe; function traverse(f: (a: T) => Maybe): (as: T[]) => Maybe; function lift(partialFunction: (...args: any[]) => T): (...args: any[]) => Maybe; class None extends Maybe { constructor(); map(f: (a: T) => U): None; fmap(f: (a: T) => Maybe): None; applies(f: (a: T) => (b: U) => Maybe): (mb: Maybe) => None; mbind(f: Maybe<(a: T) => Maybe>): None; flatten(): None; isEmpty(): boolean; get(): never; getOrElse(f: () => T): T; getOrElseGet(value: T): T; getOrThrow(err?: Error): never; orElse(f: () => Maybe): Maybe; toEither(): Either.Left; toObject(): { just: null; }; } class Just extends Maybe { private value; constructor(value: T); map(f: (a: T) => U): Just; fmap(f: (a: T) => Maybe): Maybe; applies(f: (a: T) => (b: U) => Maybe): (mb: Maybe) => Maybe; mbind(f: Maybe<(a: T) => Maybe>): Maybe; flatten(): Maybe; isDefined(): boolean; get(): T; getOrElse(value: () => T): T; getOrElseGet(value: T): T; getOrThrow(err?: Error): T; orElse(o: () => Maybe): Maybe; toEither(): Either.Right; toObject(): { just: T; }; } }