import { Either, List } from '..';
export interface Maybe<T> {
    ap<V>(maybeFn: Maybe<(val: T) => V>): Maybe<V>;
    bind<V>(fn: (val: T) => Maybe<V>): Maybe<V>;
    flatMap<V>(fn: (val: T) => Maybe<V>): Maybe<V>;
    chain<V>(fn: (val: T) => Maybe<V>): Maybe<V>;
    join<V>(): Maybe<V>;
    map<V>(fn: (val: T) => V): Maybe<V>;
    takeLeft(m: Maybe<T>): Maybe<T>;
    takeRight(m: Maybe<T>): Maybe<T>;
    cata<Z>(none: () => Z, some: (val: T) => Z): Z;
    filter<U extends T>(fn: (val: T) => val is U): Maybe<U>;
    filter(fn: (val: T) => boolean): Maybe<T>;
    fold<V>(val: V): (fn: (val: T) => V) => V;
    forEach(fn: (val: T) => void): void;
    getOrElse(val: T): T;
    orElse(maybe: Maybe<T>): Maybe<T>;
    orSome(val: T | undefined): T | undefined;
    orNull(): T | null;
    orUndefined(): T | undefined;
    isNone(): boolean;
    isSome(): boolean;
    some(): T;
    toArray(): Array<T>;
    toEither<E>(left?: E): Either<E, T>;
    toList(): List<T>;
}
export declare const Some: <T>(val: T) => Maybe<T>;
export declare const None: <T>() => Maybe<T>;
export declare const Maybe: {
    fromNull: <T>(val: T | null) => Maybe<T>;
    fromUndefined: <V>(val: V | undefined) => Maybe<V>;
    None: <T>() => Maybe<T>;
    Some: <T>(val: T) => Maybe<T>;
    toList: <T>(val: Maybe<T>) => List<T>;
};
//# sourceMappingURL=maybe.d.ts.map