import { Either } from './either';
/**
 * Created by beenotung on 2/16/17.
 */
export interface Maybe<A> {
    isJust: boolean;
    isNothing: boolean;
    map: <B>(f: (a: A) => B) => Maybe<B>;
    get(): A;
    withDefault(a: A): Maybe<A>;
    then(f: (a: A) => void): Maybe<A>;
    otherwise(f: () => void): Maybe<A>;
    toEither<E>(e: E): Either<E, A>;
}
export declare const Nothing: Maybe<any>;
export declare namespace Maybe {
    function fromNullable<A>(a: A): Maybe<A>;
    function or<A>(a: Maybe<A>, b: Maybe<A>): Maybe<A>;
    function and<A, B>(a: Maybe<A>, b: Maybe<B>): Maybe<[A, B]>;
}
