# Sink.dropAfter

Runs a producer callback until the first matching value has been forwarded.

## Signatures

```ts
export declare const dropAfter: {
    <A, E, R, R2>(sink: Sink<A, E, R>, predicate: Predicate<A>, f: (sink: Sink<A, E, R>) => Effect.Effect<unknown, E, R2>): Effect.Effect<void, never, R | R2>;
};
```

## Why

Unlike a filtering operation, `dropAfter` includes the boundary value and then terminates
producer work normally.

## Ownership and lifetime

Values are forwarded in order through the first predicate match, then early exit completes and
aborts the callback fiber. Callback failure is caught and sent to the original sink. The predicate
is synchronous; thrown exceptions are defects.

## Examples

```ts
import { Effect } from "effect"
import * as Sink from "@typed/fx/Sink"
const target = Sink.make(Effect.logError, Effect.log)
const program = Sink.dropAfter(target, (n: number) => n >= 10, (limited) => limited.onSuccess(10))
```
