export type Failure<E = unknown> = readonly [ok: false, error: E, undefined];
export type Success<T> = readonly [ok: true, error: undefined, value: T];
export type ErrValueTuple<T, E = unknown> = Failure<E> | Success<T>;
/** @since 3.0.0 */
export declare const success: <T>(value: T) => Success<T>;
/** @since 3.0.0 */
export declare const failure: <E>(err: E) => Failure<E>;
export declare const safe: {
    (promise: Promise<never>): Promise<readonly [false, unknown, never]>;
    <T>(promise: Promise<T>): Promise<ErrValueTuple<T>>;
};
export declare const doTry: {
    (fn: () => never): readonly [false, unknown, never];
    (fn: () => Promise<never>): Promise<readonly [false, unknown, never]>;
    <T>(fn: () => Promise<T>): Promise<ErrValueTuple<T>>;
    <T>(fn: () => T): ErrValueTuple<T>;
};
export declare const isFailure: (result: ErrValueTuple<unknown>) => result is Failure;
export declare const isSuccess: (result: ErrValueTuple<unknown>) => result is Success<unknown>;
export default doTry;
