import { Equals } from "@tsplus/stdlib/structure/Equals";
import { Exit } from "@effect/core/io/Exit/definition";
import { Hash } from "@tsplus/stdlib/structure/Hash";
import { TExit } from "@effect/core/stm/TExit/definition";
export declare const STMStateSym: unique symbol;
export declare type STMStateSym = typeof STMStateSym;
/**
 * @tsplus type ets/STM/State
 */
export declare type State<E, A> = Done<E, A> | Interrupted | Running;
/**
 * @tsplus type ets/STM/State/Ops
 */
export interface StateOps {
}
export declare const State: StateOps;
/**
 * @tsplus unify ets/STM/State
 */
export declare function unifyState<X extends State<any, any>>(self: X): State<[
    X
] extends [State<infer EX, any>] ? EX : never, [
    X
] extends [State<any, infer AX>] ? AX : never>;
export declare class Done<E, A> implements Equals {
    readonly exit: Exit<E, A>;
    readonly _tag = "Done";
    readonly [STMStateSym]: STMStateSym;
    constructor(exit: Exit<E, A>);
    [Hash.sym](): number;
    [Equals.sym](that: unknown): boolean;
}
export declare class Interrupted implements Equals {
    readonly _tag = "Interrupted";
    readonly [STMStateSym]: STMStateSym;
    [Hash.sym](): number;
    [Equals.sym](that: unknown): boolean;
}
export declare class Running implements Equals {
    readonly _tag = "Running";
    readonly [STMStateSym]: STMStateSym;
    [Hash.sym](): number;
    [Equals.sym](that: unknown): boolean;
}
/**
 * @tsplus static ets/STM/State/Ops isState
 * @tsplus location "@effect/core/stm/STM/State"
 */
export declare function isState(u: unknown): u is State<unknown, unknown>;
/**
 * @tsplus static ets/STM/State/Ops done
 * @tsplus location "@effect/core/stm/STM/State"
 */
export declare function done<E, A>(exit: TExit<E, A>): State<E, A>;
/**
 * @tsplus static ets/STM/State/Ops interrupted
 * @tsplus location "@effect/core/stm/STM/State"
 */
export declare const interrupted: State<never, never>;
/**
 * @tsplus static ets/STM/State/Ops running
 * @tsplus location "@effect/core/stm/STM/State"
 */
export declare const running: State<never, never>;
/**
 * @tsplus fluent ets/STM/State isRunning
 * @tsplus location "@effect/core/stm/STM/State"
 */
export declare function isRunning<E, A>(self: State<E, A>): self is Running;
//# sourceMappingURL=State.d.ts.map