<In, E, R>(
f: (input: NonEmptyReadonlyArray<In>) => Effect.Effect<boolean, E, R>
): Sink<void, In, never, E, R>Runs an effectful function for each non-empty input array while it returns
true.
Details
The sink stops consuming input when the function returns false or when the
upstream stream ends, and completes with void.
export const const forEachWhileArray: <In, E, R>(
f: (
input: NonEmptyReadonlyArray<In>
) => Effect.Effect<boolean, E, R>
) => Sink<void, In, never, E, R>
Runs an effectful function for each non-empty input array while it returns
true.
Details
The sink stops consuming input when the function returns false or when the
upstream stream ends, and completes with void.
forEachWhileArray = <function (type parameter) In in <In, E, R>(f: (input: NonEmptyReadonlyArray<In>) => Effect.Effect<boolean, E, R>): Sink<void, In, never, E, R>In, function (type parameter) E in <In, E, R>(f: (input: NonEmptyReadonlyArray<In>) => Effect.Effect<boolean, E, R>): Sink<void, In, never, E, R>E, function (type parameter) R in <In, E, R>(f: (input: NonEmptyReadonlyArray<In>) => Effect.Effect<boolean, E, R>): Sink<void, In, never, E, R>R>(
f: (
input: NonEmptyReadonlyArray<In>
) => Effect.Effect<boolean, E, R>
f: (input: NonEmptyReadonlyArray<In>(parameter) input: {
0: In;
length: number;
toString: () => string;
toLocaleString: { (): string; (locales: string | string[], options?: Intl.NumberFormatOptions & Intl.DateTimeFormatOptions): string };
concat: { (...items: Array<ConcatArray<In>>): Array<In>; (...items: Array<In | ConcatArray<In>>): Array<In> };
join: (separator?: string) => string;
slice: (start?: number, end?: number) => Array<In>;
indexOf: (searchElement: In, fromIndex?: number) => number;
lastIndexOf: (searchElement: In, fromIndex?: number) => number;
every: { (predicate: (value: In, index: number, array: ReadonlyArray<In>) => value is S, thisArg?: any): this is readonly S[]; (predicate: (value: In, index: number, array: ReadonlyArray<In>) => unknown, thisArg?: any): boolean };
some: (predicate: (value: In, index: number, array: ReadonlyArray<In>) => unknown, thisArg?: any) => boolean;
forEach: (callbackfn: (value: In, index: number, array: ReadonlyArray<In>) => void, thisArg?: any) => void;
map: (callbackfn: (value: In, index: number, array: ReadonlyArray<In>) => U, thisArg?: any) => Array<U>;
filter: { (predicate: (value: In, index: number, array: ReadonlyArray<In>) => value is S, thisArg?: any): Array<S>; (predicate: (value: In, index: number, array: ReadonlyArray<In>) => unknown, thisArg?: any): Array<In> };
reduce: { (callbackfn: (previousValue: In, currentValue: In, currentIndex: number, array: ReadonlyArray<In>) => In): In; (callbackfn: (previousValue: In, currentValue: In, currentIndex: number, array: ReadonlyArray<In>) => In, initialValue: In): I…;
reduceRight: { (callbackfn: (previousValue: In, currentValue: In, currentIndex: number, array: ReadonlyArray<In>) => In): In; (callbackfn: (previousValue: In, currentValue: In, currentIndex: number, array: ReadonlyArray<In>) => In, initialValue: In): I…;
find: { (predicate: (value: In, index: number, obj: ReadonlyArray<In>) => value is S, thisArg?: any): S | undefined; (predicate: (value: In, index: number, obj: ReadonlyArray<In>) => unknown, thisArg?: any): In | undefined };
findIndex: (predicate: (value: In, index: number, obj: ReadonlyArray<In>) => unknown, thisArg?: any) => number;
entries: () => ArrayIterator<[number, In]>;
keys: () => ArrayIterator<number>;
values: () => ArrayIterator<In>;
includes: (searchElement: In, fromIndex?: number) => boolean;
flatMap: (callback: (this: This, value: In, index: number, array: Array<In>) => U | ReadonlyArray<U>, thisArg?: This | undefined) => Array<U>;
flat: (this: A, depth?: D | undefined) => Array<FlatArray<A, D>>;
at: (index: number) => In | undefined;
findLast: { (predicate: (value: In, index: number, array: ReadonlyArray<In>) => value is S, thisArg?: any): S | undefined; (predicate: (value: In, index: number, array: ReadonlyArray<In>) => unknown, thisArg?: any): In | undefined };
findLastIndex: (predicate: (value: In, index: number, array: ReadonlyArray<In>) => unknown, thisArg?: any) => number;
toReversed: () => Array<In>;
toSorted: (compareFn?: ((a: In, b: In) => number) | undefined) => Array<In>;
toSpliced: { (start: number, deleteCount: number, ...items: Array<In>): Array<In>; (start: number, deleteCount?: number): Array<In> };
with: (index: number, value: In) => Array<In>;
}
input: import NonEmptyReadonlyArrayNonEmptyReadonlyArray<function (type parameter) In in <In, E, R>(f: (input: NonEmptyReadonlyArray<In>) => Effect.Effect<boolean, E, R>): Sink<void, In, never, E, R>In>) => import EffectEffect.type Effect.Effect = /*unresolved*/ anyEffect<boolean, function (type parameter) E in <In, E, R>(f: (input: NonEmptyReadonlyArray<In>) => Effect.Effect<boolean, E, R>): Sink<void, In, never, E, R>E, function (type parameter) R in <In, E, R>(f: (input: NonEmptyReadonlyArray<In>) => Effect.Effect<boolean, E, R>): Sink<void, In, never, 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<void, function (type parameter) In in <In, E, R>(f: (input: NonEmptyReadonlyArray<In>) => Effect.Effect<boolean, E, R>): Sink<void, In, never, E, R>In, never, function (type parameter) E in <In, E, R>(f: (input: NonEmptyReadonlyArray<In>) => Effect.Effect<boolean, E, R>): Sink<void, In, never, E, R>E, function (type parameter) R in <In, E, R>(f: (input: NonEmptyReadonlyArray<In>) => Effect.Effect<boolean, E, R>): Sink<void, In, never, E, R>R> =>
const fromTransform: <
In,
A,
E,
R,
L = never
>(
transform: (
upstream: Pull.Pull<
NonEmptyReadonlyArray<In>,
never,
void
>,
scope: Scope.Scope
) => Effect.Effect<End<A, L>, E, R>
) => Sink<A, In, L, E, R>
Creates a Sink from a low-level transform function.
Details
The transform receives the upstream pull of non-empty input arrays and the
active scope, and returns an effect that completes with the sink's End
value.
fromTransform((upstream: Pull.Pull<
readonly [In, ...In[]],
never,
void,
never
>
(parameter) upstream: {
pipe: { <A>(this: A): A; <A, B = never>(this: A, ab: (_: A) => B): B; <A, B = never, C = never>(this: A, ab: (_: A) => B, bc: (_: B) => C): C; <A, B = never, C = never, D = never>(this: A, ab: (_: A) => B, bc: (_: B) => C, cd: (_: C) => D): D; <…;
toString: () => string;
toJSON: () => unknown;
}
upstream) =>
upstream: Pull.Pull<
readonly [In, ...In[]],
never,
void,
never
>
(parameter) upstream: {
pipe: { <A>(this: A): A; <A, B = never>(this: A, ab: (_: A) => B): B; <A, B = never, C = never>(this: A, ab: (_: A) => B, bc: (_: B) => C): C; <A, B = never, C = never, D = never>(this: A, ab: (_: A) => B, bc: (_: B) => C, cd: (_: C) => D): D; <…;
toString: () => string;
toJSON: () => unknown;
}
upstream.pipe(
import EffectEffect.flatMap(f: (
input: NonEmptyReadonlyArray<In>
) => Effect.Effect<boolean, E, R>
f),
import EffectEffect.flatMap((cont: anycont) => cont: anycont ? import EffectEffect.void : import CauseCause.done()),
import EffectEffect.forever({ disableYield: booleandisableYield: true }),
import PullPull.catchDone(() => const endVoid: Effect.Effect<
End<void, never>,
never,
never
>
const endVoid: {
pipe: { <A>(this: A): A; <A, B = never>(this: A, ab: (_: A) => B): B; <A, B = never, C = never>(this: A, ab: (_: A) => B, bc: (_: B) => C): C; <A, B = never, C = never, D = never>(this: A, ab: (_: A) => B, bc: (_: B) => C, cd: (_: C) => D): D; <…;
toString: () => string;
toJSON: () => unknown;
}
endVoid)
)
)