Import
import { filterMapEffect } from "@typed/fx/Sink";Signatures
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
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()))Other public imports
These import paths expose the same declaration. Each page retains its own public name and signature.