<In, E, R>(predicate: (input: In) => Effect.Effect<boolean, E, R>): Sink<
Option.Option<In>,
In,
In,
E,
R
>Creates a sink containing the first value matched by an effectful predicate.
When to use
Use when you need to run effects, fail, or use services while searching for the first matching input.
Details
Returns Option.some with the first input whose predicate result is true,
or Option.none if the upstream stream ends first. If the predicate effect
fails, the sink fails with the same error.
export const const findEffect: <In, E, R>(
predicate: (
input: In
) => Effect.Effect<boolean, E, R>
) => Sink<Option.Option<In>, In, In, E, R>
Creates a sink containing the first value matched by an effectful predicate.
When to use
Use when you need to run effects, fail, or use services while searching for
the first matching input.
Details
Returns Option.some with the first input whose predicate result is true,
or Option.none if the upstream stream ends first. If the predicate effect
fails, the sink fails with the same error.
findEffect = <function (type parameter) In in <In, E, R>(predicate: (input: In) => Effect.Effect<boolean, E, R>): Sink<Option.Option<In>, In, In, E, R>In, function (type parameter) E in <In, E, R>(predicate: (input: In) => Effect.Effect<boolean, E, R>): Sink<Option.Option<In>, In, In, E, R>E, function (type parameter) R in <In, E, R>(predicate: (input: In) => Effect.Effect<boolean, E, R>): Sink<Option.Option<In>, In, In, E, R>R>(
predicate: (
input: In
) => Effect.Effect<boolean, E, R>
predicate: (input: Ininput: function (type parameter) In in <In, E, R>(predicate: (input: In) => Effect.Effect<boolean, E, R>): Sink<Option.Option<In>, In, In, E, R>In) => import EffectEffect.type Effect.Effect = /*unresolved*/ anyEffect<boolean, function (type parameter) E in <In, E, R>(predicate: (input: In) => Effect.Effect<boolean, E, R>): Sink<Option.Option<In>, In, In, E, R>E, function (type parameter) R in <In, E, R>(predicate: (input: In) => Effect.Effect<boolean, E, R>): Sink<Option.Option<In>, In, In, E, R>R>
): interface Sink<out A, in In = unknown, out L = never, out E = never, out R = never>A Sink<A, In, L, E, R> is used to consume elements produced by a Stream.
You can think of a sink as a function that will consume a variable amount of
In elements (could be 0, 1, or many), might fail with an error of type E,
and will eventually yield a value of type A together with a remainder of
type L (i.e. any leftovers).
Example (Running a sink with a stream)
import { Effect, Sink, Stream } from "effect"
// Create a simple sink that always succeeds with a value
const sink: Sink.Sink<number> = Sink.succeed(42)
// Use the sink to consume a stream
const stream = Stream.make(1, 2, 3)
const program = Stream.run(stream, sink)
Effect.runPromise(program).then(console.log)
// Output: 42
Namespace containing types and interfaces for Sink variance and type relationships.
Sink<import OptionOption.type Option.Option = /*unresolved*/ anyOption<function (type parameter) In in <In, E, R>(predicate: (input: In) => Effect.Effect<boolean, E, R>): Sink<Option.Option<In>, In, In, E, R>In>, function (type parameter) In in <In, E, R>(predicate: (input: In) => Effect.Effect<boolean, E, R>): Sink<Option.Option<In>, In, In, E, R>In, function (type parameter) In in <In, E, R>(predicate: (input: In) => Effect.Effect<boolean, E, R>): Sink<Option.Option<In>, In, In, E, R>In, function (type parameter) E in <In, E, R>(predicate: (input: In) => Effect.Effect<boolean, E, R>): Sink<Option.Option<In>, In, In, E, R>E, function (type parameter) R in <In, E, R>(predicate: (input: In) => Effect.Effect<boolean, E, R>): Sink<Option.Option<In>, In, In, E, R>R> =>
const reduceWhileEffect: <S, In, E, R>(
initial: LazyArg<S>,
predicate: Predicate<S>,
f: (s: S, input: In) => Effect.Effect<S, E, R>
) => Sink<S, In, In, E, R>
A sink that effectfully reduces input elements from the provided initial
state with f while the specified predicate returns true.
reduceWhileEffect(
import OptionOption.none<function (type parameter) In in <In, E, R>(predicate: (input: In) => Effect.Effect<boolean, E, R>): Sink<Option.Option<In>, In, In, E, R>In>,
import OptionOption.isNone,
(acc: Option.Option<In>acc, in_: Inin_) => import EffectEffect.map(predicate: (
input: In
) => Effect.Effect<boolean, E, R>
predicate(in_: Inin_), (b: anyb) => b: anyb ? import OptionOption.some(in_: Inin_) : acc: Option.Option<In>acc)
)