import { Applicative, ApplicativeDictionary } from "./applicative"; import { Traversable } from "./traversable"; import { Monad } from "./monad"; import { Either } from "./either"; export declare type MaybeMatch = { nothing: () => K; just: (t: T) => K; }; export declare abstract class Maybe implements Monad, Traversable { abstract match(m: MaybeMatch): K; of(v: B): Maybe; static of(v: B): Maybe; abstract chain(f: (a: A) => Maybe): Maybe; flatten(): Maybe; abstract map(f: (a: A) => B): Maybe; abstract mapTo(b: B): Maybe; abstract ap(a: Applicative<(a: A) => B>): Applicative; lift(f: (t: T1) => R, m: Maybe): Maybe; lift(f: (t: T1, u: T2) => R, m1: Maybe, m2: Maybe): Maybe; lift(f: (t1: T1, t2: T2, t3: T3) => R, m1: Maybe, m2: Maybe, m3: Maybe): Maybe; abstract foldr(acc: B, f: (a: A, b: B) => B): B; abstract foldl(f: (acc: B, a: A) => B, init: B): B; shortFoldr: (f: (a: A, b: B) => Either, acc: B) => B; shortFoldl: (f: (acc: B, a: A) => Either, acc: B) => B; maximum: () => number; minimum: () => number; sum: () => number; abstract size(): number; abstract traverse(a: ApplicativeDictionary, f: (a: A) => Applicative): Applicative>; sequence(a: ApplicativeDictionary, m: Maybe>): Applicative>; static multi: boolean; multi: boolean; } export declare function just(v: V): Maybe; export declare const nothing: Maybe; export declare function isNothing(m: Maybe): boolean; export declare function isJust(m: Maybe): boolean; export declare function fromMaybe(a: A, m: Maybe): A; export declare function maybe(b: B, f: (a: A) => B, m: Maybe): B;