import * as Assert from "assert";
export type Monad<T> = {
    unwrap(): T;
    match(match: {
        ok(value: T): void;
        error(error: unknown): void;
    }): void;
    should: {
        ok(value: T): void;
        error(error: Assert.AssertPredicate): void;
    };
};
export declare function monad<T>(cb: () => PromiseLike<T>): Promise<Monad<T>>;
export declare function monad<T>(cb: () => T): Monad<T>;
