# Sink.filterMapEffect

Runs an Effect for each input and forwards its optional successful value.

## Signatures

```ts
export declare const filterMapEffect: {
    <B, A, E2, R2>(f: (b: B) => Effect.Effect<Option.Option<A>, E2, R2>): <E, R>(sink: Sink<A, E | E2, R>) => Sink<B, E | E2, R | R2>;
    <A, E, R, B, E2, R2>(sink: Sink<A, E | E2, R>, f: (b: B) => Effect.Effect<Option.Option<A>, E2, R2>): Sink<B, E | E2, R | R2>;
};
```

## Why

Service-backed validation, selection, and transformation can happen in one consumer adapter.

## Ownership and lifetime

Each input runs one Effect. `Some` invokes the sink once, `None` zero times, and failure is routed
as a Cause. Invocation order and concurrency are controlled by the producer; services and
interruption remain explicit in the returned sink.

## Examples

```ts
import { Effect, Option } from "effect"
import * as Sink from "@typed/fx/Sink"
const sink = Sink.filterMapEffect(Sink.make(Effect.logError, Effect.log), (n: number) =>
  Effect.succeed(n > 0 ? Option.some(n) : Option.none()))
```
