import { STM } from "@effect/core/stm/STM/definition/base";
/**
 * inspired by https://github.com/tusharmath/qio/pull/22 (revised)
 */
import { _A, _E, _R } from "@effect/core/stm/STM/definition/base";
export declare class GenSTM<R, E, A> {
    readonly stm: STM<R, E, A>;
    readonly [_R]: () => R;
    readonly [_E]: () => E;
    readonly [_A]: () => A;
    constructor(stm: STM<R, E, A>);
    [Symbol.iterator](): Generator<GenSTM<R, E, A>, A, any>;
}
/**
 * Do simulation using Generators
 * @tsplus static ets/STM/Ops gen
 * @tsplus location "@effect/core/stm/STM/operations/gen"
 */
export declare function gen<Eff extends GenSTM<any, any, any>, AEff>(f: (i: {
    <R, E, A>(_: STM<R, E, A>): GenSTM<R, E, A>;
}) => Generator<Eff, AEff, any>): STM<[
    Eff
] extends [{
    [_R]: () => infer R;
}] ? R : never, [
    Eff
] extends [{
    [_E]: () => infer E;
}] ? E : never, AEff>;
//# sourceMappingURL=gen.d.ts.map