Import
import { Sink } from "@typed/fx";Access Sink.filterMapLoopEffect through the imported Sink export. Its declaration below describes the member.
This public exposure is a re-export. Its import path is supported; declaration documentation is shared with the other public exposures below.
Signatures
export declare const filterMapLoopEffect: {
<B, A, E2, R2, C>(seed: B, f: (acc: B, a: A) => Effect.Effect<readonly [
Option.Option<C>,
B
], E2, R2>): <E, R>(sink: Sink<C, E, R>) => Sink<A, E | E2, R | R2>;
<A, E, R, B, R2, C>(sink: Sink<C, E, R>, seed: B, f: (acc: B, a: A) => Effect.Effect<readonly [
Option.Option<C>,
B
], E, R2>): Sink<A, E, R | R2>;
};Why
One transition can perform service-backed work, update state, and decide whether the consumer should observe a value.
Ownership and lifetime
Callback invocation constructs a transition Effect from the seed visible at that moment. The
adapter does not serialize those Effects: overlapping callbacks can read the same seed, and
successful transitions commit in completion order. Some then invokes the wrapped sink once,
None not at all, and failure invokes its failure callback without committing. The sink instance
retains its seed across producer runs; construct a new one to reset it.
Examples
import { Effect, Option } from "effect"
import * as Sink from "@typed/fx/Sink"
const target = Sink.make(Effect.logError, Effect.log)
const sink = Sink.filterMapLoopEffect(target, 0, (count, n: number) => Effect.succeed([Option.some(n), count + 1] as const))Other public imports
These import paths expose the same declaration. Each page retains its own public name and signature.