import type { EffectURI } from "@effect/core/io/Effect/definition/base" type NonEmptyArrayEffect = Array> & { readonly 0: Effect } export type TupleA = { [K in keyof T]: [T[K]] extends [Effect] ? A : never } /** * Like `forEach` + `identity` with a tuple type. * * @tsplus static effect/core/io/Effect.Ops tuple */ export function tuple( ...t: T & { 0: Effect } ): Effect< [T[number]] extends [{ [EffectURI]: { _R: (_: never) => infer R } }] ? R : never, [T[number]] extends [{ [EffectURI]: { _E: (_: never) => infer E } }] ? E : never, TupleA > { return Effect.collectAll(t).map((c) => c.toArray) as any } /** * Like tuple but parallel, same as `forEachPar` + `identity` with a tuple type. * * @tsplus static effect/core/io/Effect.Ops tuplePar */ export function tuplePar( ...t: T & { 0: Effect } ): Effect< [T[number]] extends [{ [EffectURI]: { _R: (_: never) => infer R } }] ? R : never, [T[number]] extends [{ [EffectURI]: { _E: (_: never) => infer E } }] ? E : never, TupleA > { return Effect.collectAllPar(t).map((c) => c.toArray) as any }