# timeout

Completes the stream if it does not produce a value (or complete) within
`duration` of the previous event. Matches Effect `Stream.timeout`.

The timeout is reset after each emission. An infinite duration is a no-op;
a zero duration completes immediately.

## Signatures

```ts
export declare const timeout: {
    (duration: Duration.Input): <A, E, R>(self: Fx<A, E, R>) => Fx<A, E, R | Scope.Scope>;
    <A, E, R>(self: Fx<A, E, R>, duration: Duration.Input): Fx<A, E, R | Scope.Scope>;
};
```

## Why

Silence is meaningful in push systems. This operator turns an idle period
into normal completion without inventing an error type.

## Ownership and lifetime

Subscription starts the source and one scoped timer. Each delivered value
forwards immediately and rearms the timer. If the timer wins, it interrupts
the source and the result completes; the interrupt caused by that timeout is
not forwarded. Source failure before the deadline propagates. Interruption
clears both source fiber and timer. Infinite duration returns the source;
zero duration never starts it.

## Examples

```ts
import { timeout } from "@typed/fx/Fx"
import { periodic } from "@typed/fx/Fx"

const bounded = timeout(periodic("1 second"), "250 millis")
```
