import { Equals } from "@tsplus/stdlib/structure/Equals";
import { Hash } from "@tsplus/stdlib/structure/Hash";
import { Cause } from "@effect/core/io/Cause/definition";
/**
 * @tsplus type ets/Exit
 */
export declare type Exit<E, A> = Success<A> | Failure<E>;
/**
 * @tsplus type ets/Exit/Ops
 */
export interface ExitOps {
    $: ExitAspects;
}
export declare const Exit: ExitOps;
/**
 * @tsplus type ets/Exit/Aspects
 */
export interface ExitAspects {
}
/**
 * @tsplus type ets/Exit/Success
 */
export declare class Success<A> implements Equals {
    readonly value: A;
    readonly _tag = "Success";
    constructor(value: A);
    [Hash.sym](): number;
    [Equals.sym](that: unknown): boolean;
}
/**
 * @tsplus type ets/Exit/Failure
 */
export declare class Failure<E> implements Equals {
    readonly cause: Cause<E>;
    readonly _tag = "Failure";
    constructor(cause: Cause<E>);
    [Hash.sym](): number;
    [Equals.sym](that: unknown): boolean;
}
/**
 * @tsplus unify ets/Exit
 * @tsplus unify ets/Exit/Success
 * @tsplus unify ets/Exit/Failure
 */
export declare function unifyExit<X extends Exit<any, any>>(self: X): Exit<[
    X
] extends [Exit<infer EX, any>] ? EX : never, [
    X
] extends [Exit<any, infer AX>] ? AX : never>;
//# sourceMappingURL=definition.d.ts.map