# Fx.until

Forwards `events` until `signal` emits, then interrupts `events`.

## Signatures

```ts
export declare const until: {
    <B, E2, R2>(signal: Fx<B, E2, R2>): <A, E, R>(events: Fx<A, E, R>) => Fx<A, E | E2, R | R2>;
    <A, E, R, B, E2, R2>(events: Fx<A, E, R>, signal: Fx<B, E2, R2>): Fx<A, E | E2, R | R2>;
};
```

## Why

`until` gives an event source an external stop boundary. Event values retain their order until
the first signal; the signal itself is not emitted and the event run then completes by interruption.

## Ownership and lifetime

Both sources start behind one gate in a private Scope. Event completion cancels the signal;
signaling cancels events; failures are forwarded unless they are the expected cancellation.

## Examples

```ts
import { Fx } from "@typed/fx"
const bounded = Fx.until(Fx.fromIterable([1, 2, 3]), Fx.succeed("stop"))
```
