# tuple

Combines multiple Fx streams into a single Fx that emits a tuple of the latest values from each stream.
The resulting Fx waits for all input streams to emit at least once before emitting the first tuple.
Afterwards, it emits a new tuple whenever any input stream emits a new value.

## Signatures

```ts
export declare function tuple<FX extends ReadonlyArray<Fx<any, any, any>>>(...fxs: FX): Fx<{
    readonly [K in keyof FX]: Fx.Success<FX[K]>;
}, Fx.Error<FX[number]>, Fx.Services<FX[number]>>;
```

## Why

`tuple` combines independent push sources by latest value while retaining their positional types.
It emits nothing until every source has produced once, then emits a snapshot after any update.

## Ownership and lifetime

All inputs run concurrently as children of the consumer and one latest value per input is retained
for that run. Failure/interruption stops the group; normal completion waits for every input.

## Examples

```ts
import { Fx } from "@typed/fx"
const point = Fx.tuple(Fx.succeed(10), Fx.succeed(20))
```
