import { STM } from "@effect/core/stm/STM/definition/base";
import { ForcedTuple } from "@tsplus/stdlib/utilities/Types";
import type { _E, _R } from "@effect/core/stm/STM/definition/base";
declare type NonEmptyArraySTM = Array<STM<any, any, any>> & {
    readonly 0: STM<any, any, any>;
};
export declare type TupleA<T extends NonEmptyArraySTM> = {
    [K in keyof T]: [T[K]] extends [STM<any, any, infer A>] ? A : never;
};
/**
 * Like `forEach` + `identity` with a tuple type.
 * @tsplus static ets/STM/Ops tuple
 * @tsplus location "@effect/core/stm/STM/operations/tuple"
 */
export declare function tuple<T extends NonEmptyArraySTM>(...t: T & {
    0: STM<any, any, any>;
}): STM<[
    T[number]
] extends [{
    [_R]: () => infer R;
}] ? R : never, [
    T[number]
] extends [{
    [_E]: () => infer E;
}] ? E : never, ForcedTuple<TupleA<T>>>;
export {};
//# sourceMappingURL=tuple.d.ts.map