import type { STMTypeId } from "@effect/core/stm/STM" type NonEmptyArraySTM = Array> & { readonly 0: STM } export type TupleA = { [K in keyof T]: [T[K]] extends [STM] ? A : never } /** * Like `forEach` + `identity` with a tuple type. * * @tsplus static effect/core/stm/STM.Ops tuple */ export function tuple( ...t: T & { 0: STM } ): STM< [T[number]] extends [{ [STMTypeId]: { _R: (_: never) => infer R } }] ? R : never, [T[number]] extends [{ [STMTypeId]: { _E: (_: never) => infer E } }] ? E : never, TupleA > { return STM.collectAll(t) as any }