<In>(): make.Constructor<In>Creates a pipe-style constructor for sinks over input type In.
Details
The returned function exposes the sink input as a Stream<In>, applies the
provided pipeline, and uses the final effect's success value as the sink
result.
export const const make: <In>() => make.Constructor<In>Creates a pipe-style constructor for sinks over input type In.
Details
The returned function exposes the sink input as a Stream<In>, applies the
provided pipeline, and uses the final effect's success value as the sink
result.
Companion namespace containing overload types for the pipe-style sink
constructor returned by Sink.make.
make = <function (type parameter) In in <In>(): make.Constructor<In>In>(): make.interface make.Constructor<In>Overloaded function type returned by Sink.make.
Details
The first pipeline function receives the sink input as a Stream<In>. The
final pipeline step must return an Effect, whose success value becomes
the sink result.
Constructor<function (type parameter) In in <In>(): make.Constructor<In>In> => (...fns: [](parameter) fns: {
length: 0;
toString: () => string;
toLocaleString: { (): string; (locales: string | string[], options?: Intl.NumberFormatOptions & Intl.DateTimeFormatOptions): string };
pop: () => undefined;
push: (...items: Array<never>) => number;
concat: { (...items: Array<ConcatArray<never>>): Array<never>; (...items: Array<ConcatArray<never>>): Array<never> };
join: (separator?: string) => string;
reverse: () => Array<never>;
shift: () => undefined;
slice: (start?: number, end?: number) => Array<never>;
sort: (compareFn?: ((a: never, b: never) => number) | undefined) => [];
splice: { (start: number, deleteCount?: number): Array<never>; (start: number, deleteCount: number, ...items: Array<never>): Array<never> };
unshift: (...items: Array<never>) => number;
indexOf: (searchElement: never, fromIndex?: number) => number;
lastIndexOf: (searchElement: never, fromIndex?: number) => number;
every: { (predicate: (value: never, index: number, array: Array<never>) => value is S, thisArg?: any): this is S[]; (predicate: (value: never, index: number, array: Array<never>) => unknown, thisArg?: any): boolean };
some: (predicate: (value: never, index: number, array: Array<never>) => unknown, thisArg?: any) => boolean;
forEach: (callbackfn: (value: never, index: number, array: Array<never>) => void, thisArg?: any) => void;
map: (callbackfn: (value: never, index: number, array: Array<never>) => U, thisArg?: any) => Array<U>;
filter: { (predicate: (value: never, index: number, array: Array<never>) => value is S, thisArg?: any): Array<S>; (predicate: (value: never, index: number, array: Array<never>) => unknown, thisArg?: any): Array<never> };
reduce: { (callbackfn: (previousValue: never, currentValue: never, currentIndex: number, array: Array<never>) => never): never; (callbackfn: (previousValue: never, currentValue: never, currentIndex: number, array: Array<never>) => never, initialVa…;
reduceRight: { (callbackfn: (previousValue: never, currentValue: never, currentIndex: number, array: Array<never>) => never): never; (callbackfn: (previousValue: never, currentValue: never, currentIndex: number, array: Array<never>) => never, initialVa…;
find: { (predicate: (value: never, index: number, obj: Array<never>) => value is S, thisArg?: any): S | undefined; (predicate: (value: never, index: number, obj: Array<never>) => unknown, thisArg?: any): undefined };
findIndex: (predicate: (value: never, index: number, obj: Array<never>) => unknown, thisArg?: any) => number;
fill: (value: never, start?: number, end?: number) => [];
copyWithin: (target: number, start: number, end?: number) => [];
entries: () => ArrayIterator<[number, never]>;
keys: () => ArrayIterator<number>;
values: () => ArrayIterator<never>;
includes: (searchElement: never, fromIndex?: number) => boolean;
flatMap: (callback: (this: This, value: never, index: number, array: Array<never>) => U | ReadonlyArray<U>, thisArg?: This | undefined) => Array<U>;
flat: (this: A, depth?: D | undefined) => Array<FlatArray<A, D>>;
at: (index: number) => undefined;
findLast: { (predicate: (value: never, index: number, array: Array<never>) => value is S, thisArg?: any): S | undefined; (predicate: (value: never, index: number, array: Array<never>) => unknown, thisArg?: any): undefined };
findLastIndex: (predicate: (value: never, index: number, array: Array<never>) => unknown, thisArg?: any) => number;
toReversed: () => Array<never>;
toSorted: (compareFn?: ((a: never, b: never) => number) | undefined) => Array<never>;
toSpliced: { (start: number, deleteCount: number, ...items: Array<never>): Array<never>; (start: number, deleteCount?: number): Array<never> };
with: (index: number, value: never) => Array<never>;
}
fns: []) =>
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 [unknown, ...unknown[]],
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, scope: Scope.Scope(parameter) scope: {
strategy: "sequential" | "parallel";
state: State.Open | State.Closed | State.Empty;
}
scope) =>
import pipepipe(
import internalStreaminternalStream.const fromChannel: <
A extends Arr.NonEmptyReadonlyArray<any>,
E,
R
>(
channel: Channel.Channel<
A,
E,
void,
unknown,
unknown,
unknown,
R
>
) => Stream<
A extends Arr.NonEmptyReadonlyArray<infer A>
? A
: never,
E,
R
>
fromChannel(import ChannelChannel.fromPull(import EffectEffect.succeed(upstream: Pull.Pull<
readonly [unknown, ...unknown[]],
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))),
...fns: [](parameter) fns: {
length: 0;
toString: () => string;
toLocaleString: { (): string; (locales: string | string[], options?: Intl.NumberFormatOptions & Intl.DateTimeFormatOptions): string };
pop: () => undefined;
push: (...items: Array<never>) => number;
concat: { (...items: Array<ConcatArray<never>>): Array<never>; (...items: Array<ConcatArray<never>>): Array<never> };
join: (separator?: string) => string;
reverse: () => Array<never>;
shift: () => undefined;
slice: (start?: number, end?: number) => Array<never>;
sort: (compareFn?: ((a: never, b: never) => number) | undefined) => [];
splice: { (start: number, deleteCount?: number): Array<never>; (start: number, deleteCount: number, ...items: Array<never>): Array<never> };
unshift: (...items: Array<never>) => number;
indexOf: (searchElement: never, fromIndex?: number) => number;
lastIndexOf: (searchElement: never, fromIndex?: number) => number;
every: { (predicate: (value: never, index: number, array: Array<never>) => value is S, thisArg?: any): this is S[]; (predicate: (value: never, index: number, array: Array<never>) => unknown, thisArg?: any): boolean };
some: (predicate: (value: never, index: number, array: Array<never>) => unknown, thisArg?: any) => boolean;
forEach: (callbackfn: (value: never, index: number, array: Array<never>) => void, thisArg?: any) => void;
map: (callbackfn: (value: never, index: number, array: Array<never>) => U, thisArg?: any) => Array<U>;
filter: { (predicate: (value: never, index: number, array: Array<never>) => value is S, thisArg?: any): Array<S>; (predicate: (value: never, index: number, array: Array<never>) => unknown, thisArg?: any): Array<never> };
reduce: { (callbackfn: (previousValue: never, currentValue: never, currentIndex: number, array: Array<never>) => never): never; (callbackfn: (previousValue: never, currentValue: never, currentIndex: number, array: Array<never>) => never, initialVa…;
reduceRight: { (callbackfn: (previousValue: never, currentValue: never, currentIndex: number, array: Array<never>) => never): never; (callbackfn: (previousValue: never, currentValue: never, currentIndex: number, array: Array<never>) => never, initialVa…;
find: { (predicate: (value: never, index: number, obj: Array<never>) => value is S, thisArg?: any): S | undefined; (predicate: (value: never, index: number, obj: Array<never>) => unknown, thisArg?: any): undefined };
findIndex: (predicate: (value: never, index: number, obj: Array<never>) => unknown, thisArg?: any) => number;
fill: (value: never, start?: number, end?: number) => [];
copyWithin: (target: number, start: number, end?: number) => [];
entries: () => ArrayIterator<[number, never]>;
keys: () => ArrayIterator<number>;
values: () => ArrayIterator<never>;
includes: (searchElement: never, fromIndex?: number) => boolean;
flatMap: (callback: (this: This, value: never, index: number, array: Array<never>) => U | ReadonlyArray<U>, thisArg?: This | undefined) => Array<U>;
flat: (this: A, depth?: D | undefined) => Array<FlatArray<A, D>>;
at: (index: number) => undefined;
findLast: { (predicate: (value: never, index: number, array: Array<never>) => value is S, thisArg?: any): S | undefined; (predicate: (value: never, index: number, array: Array<never>) => unknown, thisArg?: any): undefined };
findLastIndex: (predicate: (value: never, index: number, array: Array<never>) => unknown, thisArg?: any) => number;
toReversed: () => Array<never>;
toSorted: (compareFn?: ((a: never, b: never) => number) | undefined) => Array<never>;
toSpliced: { (start: number, deleteCount: number, ...items: Array<never>): Array<never>; (start: number, deleteCount?: number): Array<never> };
with: (index: number, value: never) => Array<never>;
}
fns as any as [() => import EffectEffect.type Effect.Effect = /*unresolved*/ anyEffect<any>],
import EffectEffect.flatMap((a: anya) => import CauseCause.done<type End<A, L = never> = readonly [
value: A,
leftover?: any
]
Tuple returned when a Sink finishes.
Details
The first element is the sink result. The optional second element contains a
non-empty array of leftover input that was pulled but not consumed.
End<any>>([a: anya])),
import ScopeScope.provide(scope: Scope.Scope(parameter) scope: {
strategy: "sequential" | "parallel";
state: State.Open | State.Closed | State.Empty;
}
scope)
)
)
/**
* Companion namespace containing overload types for the pipe-style sink
* constructor returned by `Sink.make`.
*
* @since 4.0.0
*/
export declare namespace make {
/**
* Overloaded function type returned by `Sink.make`.
*
* **Details**
*
* The first pipeline function receives the sink input as a `Stream<In>`. The
* final pipeline step must return an `Effect`, whose success value becomes
* the sink result.
*
* @category models
* @since 4.0.0
*/
export interface interface make.Constructor<In>Overloaded function type returned by Sink.make.
Details
The first pipeline function receives the sink input as a Stream<In>. The
final pipeline step must return an Effect, whose success value becomes
the sink result.
Constructor<function (type parameter) In in Constructor<In>In> {
<function (type parameter) E in <E, R, B = never>(ab: (_: Stream<In>) => Effect.Effect<B, E, R>): Sink<B, In, never, E, Exclude<R, Scope.Scope>>E, function (type parameter) R in <E, R, B = never>(ab: (_: Stream<In>) => Effect.Effect<B, E, R>): Sink<B, In, never, E, Exclude<R, Scope.Scope>>R, function (type parameter) B in <E, R, B = never>(ab: (_: Stream<In>) => Effect.Effect<B, E, R>): Sink<B, In, never, E, Exclude<R, Scope.Scope>>B = never>(ab: (
_: Stream<In>
) => Effect.Effect<B, E, R>
ab: (_: Stream<In>(parameter) _: {
channel: Channel.Channel<Arr.NonEmptyReadonlyArray<A>, E, void, unknown, unknown, unknown, R>;
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; <…;
}
_: interface Stream<out A, out E = never, out R = never>A Stream<A, E, R> describes a program that can emit many A values, fail
with E, and require R.
Details
Streams are pull-based with backpressure and emit chunks to amortize effect
evaluation. They support monadic composition and error handling similar to
Effect, adapted for multiple values.
Example (Creating and consuming streams)
import { Console, Effect, Stream } from "effect"
const program = Effect.gen(function*() {
yield* Stream.make(1, 2, 3).pipe(
Stream.map((n) => n * 2),
Stream.runForEach((n) => Console.log(n))
)
})
Effect.runPromise(program)
// Output:
// 2
// 4
// 6
Stream<function (type parameter) In in Constructor<In>In>) => import EffectEffect.type Effect.Effect = /*unresolved*/ anyEffect<function (type parameter) B in <E, R, B = never>(ab: (_: Stream<In>) => Effect.Effect<B, E, R>): Sink<B, In, never, E, Exclude<R, Scope.Scope>>B, function (type parameter) E in <E, R, B = never>(ab: (_: Stream<In>) => Effect.Effect<B, E, R>): Sink<B, In, never, E, Exclude<R, Scope.Scope>>E, function (type parameter) R in <E, R, B = never>(ab: (_: Stream<In>) => Effect.Effect<B, E, R>): Sink<B, In, never, E, Exclude<R, Scope.Scope>>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<function (type parameter) B in <E, R, B = never>(ab: (_: Stream<In>) => Effect.Effect<B, E, R>): Sink<B, In, never, E, Exclude<R, Scope.Scope>>B, function (type parameter) In in Constructor<In>In, never, function (type parameter) E in <E, R, B = never>(ab: (_: Stream<In>) => Effect.Effect<B, E, R>): Sink<B, In, never, E, Exclude<R, Scope.Scope>>E, type Exclude<T, U> = T extends U
? never
: T
Exclude from T those types that are assignable to U
Exclude<function (type parameter) R in <E, R, B = never>(ab: (_: Stream<In>) => Effect.Effect<B, E, R>): Sink<B, In, never, E, Exclude<R, Scope.Scope>>R, import ScopeScope.type Scope.Scope = /*unresolved*/ anyScope>>
<function (type parameter) E in <E, R, B = never, C = never>(ab: (_: Stream<In>) => B, bc: (_: B) => Effect.Effect<C, E, R>): Sink<C, In, never, E, Exclude<R, Scope.Scope>>E, function (type parameter) R in <E, R, B = never, C = never>(ab: (_: Stream<In>) => B, bc: (_: B) => Effect.Effect<C, E, R>): Sink<C, In, never, E, Exclude<R, Scope.Scope>>R, function (type parameter) B in <E, R, B = never, C = never>(ab: (_: Stream<In>) => B, bc: (_: B) => Effect.Effect<C, E, R>): Sink<C, In, never, E, Exclude<R, Scope.Scope>>B = never, function (type parameter) C in <E, R, B = never, C = never>(ab: (_: Stream<In>) => B, bc: (_: B) => Effect.Effect<C, E, R>): Sink<C, In, never, E, Exclude<R, Scope.Scope>>C = never>(
ab: (_: Stream<In>) => Bab: (_: Stream<In>(parameter) _: {
channel: Channel.Channel<Arr.NonEmptyReadonlyArray<A>, E, void, unknown, unknown, unknown, R>;
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; <…;
}
_: interface Stream<out A, out E = never, out R = never>A Stream<A, E, R> describes a program that can emit many A values, fail
with E, and require R.
Details
Streams are pull-based with backpressure and emit chunks to amortize effect
evaluation. They support monadic composition and error handling similar to
Effect, adapted for multiple values.
Example (Creating and consuming streams)
import { Console, Effect, Stream } from "effect"
const program = Effect.gen(function*() {
yield* Stream.make(1, 2, 3).pipe(
Stream.map((n) => n * 2),
Stream.runForEach((n) => Console.log(n))
)
})
Effect.runPromise(program)
// Output:
// 2
// 4
// 6
Stream<function (type parameter) In in Constructor<In>In>) => function (type parameter) B in <E, R, B = never, C = never>(ab: (_: Stream<In>) => B, bc: (_: B) => Effect.Effect<C, E, R>): Sink<C, In, never, E, Exclude<R, Scope.Scope>>B,
bc: (_: B) => Effect.Effect<C, E, R>bc: (_: B = never_: function (type parameter) B in <E, R, B = never, C = never>(ab: (_: Stream<In>) => B, bc: (_: B) => Effect.Effect<C, E, R>): Sink<C, In, never, E, Exclude<R, Scope.Scope>>B) => import EffectEffect.type Effect.Effect = /*unresolved*/ anyEffect<function (type parameter) C in <E, R, B = never, C = never>(ab: (_: Stream<In>) => B, bc: (_: B) => Effect.Effect<C, E, R>): Sink<C, In, never, E, Exclude<R, Scope.Scope>>C, function (type parameter) E in <E, R, B = never, C = never>(ab: (_: Stream<In>) => B, bc: (_: B) => Effect.Effect<C, E, R>): Sink<C, In, never, E, Exclude<R, Scope.Scope>>E, function (type parameter) R in <E, R, B = never, C = never>(ab: (_: Stream<In>) => B, bc: (_: B) => Effect.Effect<C, E, R>): Sink<C, In, never, E, Exclude<R, Scope.Scope>>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<function (type parameter) C in <E, R, B = never, C = never>(ab: (_: Stream<In>) => B, bc: (_: B) => Effect.Effect<C, E, R>): Sink<C, In, never, E, Exclude<R, Scope.Scope>>C, function (type parameter) In in Constructor<In>In, never, function (type parameter) E in <E, R, B = never, C = never>(ab: (_: Stream<In>) => B, bc: (_: B) => Effect.Effect<C, E, R>): Sink<C, In, never, E, Exclude<R, Scope.Scope>>E, type Exclude<T, U> = T extends U
? never
: T
Exclude from T those types that are assignable to U
Exclude<function (type parameter) R in <E, R, B = never, C = never>(ab: (_: Stream<In>) => B, bc: (_: B) => Effect.Effect<C, E, R>): Sink<C, In, never, E, Exclude<R, Scope.Scope>>R, import ScopeScope.type Scope.Scope = /*unresolved*/ anyScope>>
<function (type parameter) E in <E, R, B = never, C = never, D = never>(ab: (_: Stream<In>) => B, bc: (_: B) => C, cd: (_: C) => Effect.Effect<D, E, R>): Sink<D, In, never, E, Exclude<R, Scope.Scope>>E, function (type parameter) R in <E, R, B = never, C = never, D = never>(ab: (_: Stream<In>) => B, bc: (_: B) => C, cd: (_: C) => Effect.Effect<D, E, R>): Sink<D, In, never, E, Exclude<R, Scope.Scope>>R, function (type parameter) B in <E, R, B = never, C = never, D = never>(ab: (_: Stream<In>) => B, bc: (_: B) => C, cd: (_: C) => Effect.Effect<D, E, R>): Sink<D, In, never, E, Exclude<R, Scope.Scope>>B = never, function (type parameter) C in <E, R, B = never, C = never, D = never>(ab: (_: Stream<In>) => B, bc: (_: B) => C, cd: (_: C) => Effect.Effect<D, E, R>): Sink<D, In, never, E, Exclude<R, Scope.Scope>>C = never, function (type parameter) D in <E, R, B = never, C = never, D = never>(ab: (_: Stream<In>) => B, bc: (_: B) => C, cd: (_: C) => Effect.Effect<D, E, R>): Sink<D, In, never, E, Exclude<R, Scope.Scope>>D = never>(
ab: (_: Stream<In>) => Bab: (_: Stream<In>(parameter) _: {
channel: Channel.Channel<Arr.NonEmptyReadonlyArray<A>, E, void, unknown, unknown, unknown, R>;
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; <…;
}
_: interface Stream<out A, out E = never, out R = never>A Stream<A, E, R> describes a program that can emit many A values, fail
with E, and require R.
Details
Streams are pull-based with backpressure and emit chunks to amortize effect
evaluation. They support monadic composition and error handling similar to
Effect, adapted for multiple values.
Example (Creating and consuming streams)
import { Console, Effect, Stream } from "effect"
const program = Effect.gen(function*() {
yield* Stream.make(1, 2, 3).pipe(
Stream.map((n) => n * 2),
Stream.runForEach((n) => Console.log(n))
)
})
Effect.runPromise(program)
// Output:
// 2
// 4
// 6
Stream<function (type parameter) In in Constructor<In>In>) => function (type parameter) B in <E, R, B = never, C = never, D = never>(ab: (_: Stream<In>) => B, bc: (_: B) => C, cd: (_: C) => Effect.Effect<D, E, R>): Sink<D, In, never, E, Exclude<R, Scope.Scope>>B,
bc: (_: B) => Cbc: (_: B = never_: function (type parameter) B in <E, R, B = never, C = never, D = never>(ab: (_: Stream<In>) => B, bc: (_: B) => C, cd: (_: C) => Effect.Effect<D, E, R>): Sink<D, In, never, E, Exclude<R, Scope.Scope>>B) => function (type parameter) C in <E, R, B = never, C = never, D = never>(ab: (_: Stream<In>) => B, bc: (_: B) => C, cd: (_: C) => Effect.Effect<D, E, R>): Sink<D, In, never, E, Exclude<R, Scope.Scope>>C,
cd: (_: C) => Effect.Effect<D, E, R>cd: (_: C = never_: function (type parameter) C in <E, R, B = never, C = never, D = never>(ab: (_: Stream<In>) => B, bc: (_: B) => C, cd: (_: C) => Effect.Effect<D, E, R>): Sink<D, In, never, E, Exclude<R, Scope.Scope>>C) => import EffectEffect.type Effect.Effect = /*unresolved*/ anyEffect<function (type parameter) D in <E, R, B = never, C = never, D = never>(ab: (_: Stream<In>) => B, bc: (_: B) => C, cd: (_: C) => Effect.Effect<D, E, R>): Sink<D, In, never, E, Exclude<R, Scope.Scope>>D, function (type parameter) E in <E, R, B = never, C = never, D = never>(ab: (_: Stream<In>) => B, bc: (_: B) => C, cd: (_: C) => Effect.Effect<D, E, R>): Sink<D, In, never, E, Exclude<R, Scope.Scope>>E, function (type parameter) R in <E, R, B = never, C = never, D = never>(ab: (_: Stream<In>) => B, bc: (_: B) => C, cd: (_: C) => Effect.Effect<D, E, R>): Sink<D, In, never, E, Exclude<R, Scope.Scope>>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<function (type parameter) D in <E, R, B = never, C = never, D = never>(ab: (_: Stream<In>) => B, bc: (_: B) => C, cd: (_: C) => Effect.Effect<D, E, R>): Sink<D, In, never, E, Exclude<R, Scope.Scope>>D, function (type parameter) In in Constructor<In>In, never, function (type parameter) E in <E, R, B = never, C = never, D = never>(ab: (_: Stream<In>) => B, bc: (_: B) => C, cd: (_: C) => Effect.Effect<D, E, R>): Sink<D, In, never, E, Exclude<R, Scope.Scope>>E, type Exclude<T, U> = T extends U
? never
: T
Exclude from T those types that are assignable to U
Exclude<function (type parameter) R in <E, R, B = never, C = never, D = never>(ab: (_: Stream<In>) => B, bc: (_: B) => C, cd: (_: C) => Effect.Effect<D, E, R>): Sink<D, In, never, E, Exclude<R, Scope.Scope>>R, import ScopeScope.type Scope.Scope = /*unresolved*/ anyScope>>
<function (type parameter) E in <E, R, B = never, C = never, D = never, F = never>(ab: (_: Stream<In>) => B, bc: (_: B) => C, cd: (_: C) => D, df: (_: D) => Effect.Effect<F, E, R>): Sink<F, In, never, E, Exclude<R, Scope.Scope>>E, function (type parameter) R in <E, R, B = never, C = never, D = never, F = never>(ab: (_: Stream<In>) => B, bc: (_: B) => C, cd: (_: C) => D, df: (_: D) => Effect.Effect<F, E, R>): Sink<F, In, never, E, Exclude<R, Scope.Scope>>R, function (type parameter) B in <E, R, B = never, C = never, D = never, F = never>(ab: (_: Stream<In>) => B, bc: (_: B) => C, cd: (_: C) => D, df: (_: D) => Effect.Effect<F, E, R>): Sink<F, In, never, E, Exclude<R, Scope.Scope>>B = never, function (type parameter) C in <E, R, B = never, C = never, D = never, F = never>(ab: (_: Stream<In>) => B, bc: (_: B) => C, cd: (_: C) => D, df: (_: D) => Effect.Effect<F, E, R>): Sink<F, In, never, E, Exclude<R, Scope.Scope>>C = never, function (type parameter) D in <E, R, B = never, C = never, D = never, F = never>(ab: (_: Stream<In>) => B, bc: (_: B) => C, cd: (_: C) => D, df: (_: D) => Effect.Effect<F, E, R>): Sink<F, In, never, E, Exclude<R, Scope.Scope>>D = never, function (type parameter) F in <E, R, B = never, C = never, D = never, F = never>(ab: (_: Stream<In>) => B, bc: (_: B) => C, cd: (_: C) => D, df: (_: D) => Effect.Effect<F, E, R>): Sink<F, In, never, E, Exclude<R, Scope.Scope>>F = never>(
ab: (_: Stream<In>) => Bab: (_: Stream<In>(parameter) _: {
channel: Channel.Channel<Arr.NonEmptyReadonlyArray<A>, E, void, unknown, unknown, unknown, R>;
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; <…;
}
_: interface Stream<out A, out E = never, out R = never>A Stream<A, E, R> describes a program that can emit many A values, fail
with E, and require R.
Details
Streams are pull-based with backpressure and emit chunks to amortize effect
evaluation. They support monadic composition and error handling similar to
Effect, adapted for multiple values.
Example (Creating and consuming streams)
import { Console, Effect, Stream } from "effect"
const program = Effect.gen(function*() {
yield* Stream.make(1, 2, 3).pipe(
Stream.map((n) => n * 2),
Stream.runForEach((n) => Console.log(n))
)
})
Effect.runPromise(program)
// Output:
// 2
// 4
// 6
Stream<function (type parameter) In in Constructor<In>In>) => function (type parameter) B in <E, R, B = never, C = never, D = never, F = never>(ab: (_: Stream<In>) => B, bc: (_: B) => C, cd: (_: C) => D, df: (_: D) => Effect.Effect<F, E, R>): Sink<F, In, never, E, Exclude<R, Scope.Scope>>B,
bc: (_: B) => Cbc: (_: B = never_: function (type parameter) B in <E, R, B = never, C = never, D = never, F = never>(ab: (_: Stream<In>) => B, bc: (_: B) => C, cd: (_: C) => D, df: (_: D) => Effect.Effect<F, E, R>): Sink<F, In, never, E, Exclude<R, Scope.Scope>>B) => function (type parameter) C in <E, R, B = never, C = never, D = never, F = never>(ab: (_: Stream<In>) => B, bc: (_: B) => C, cd: (_: C) => D, df: (_: D) => Effect.Effect<F, E, R>): Sink<F, In, never, E, Exclude<R, Scope.Scope>>C,
cd: (_: C) => Dcd: (_: C = never_: function (type parameter) C in <E, R, B = never, C = never, D = never, F = never>(ab: (_: Stream<In>) => B, bc: (_: B) => C, cd: (_: C) => D, df: (_: D) => Effect.Effect<F, E, R>): Sink<F, In, never, E, Exclude<R, Scope.Scope>>C) => function (type parameter) D in <E, R, B = never, C = never, D = never, F = never>(ab: (_: Stream<In>) => B, bc: (_: B) => C, cd: (_: C) => D, df: (_: D) => Effect.Effect<F, E, R>): Sink<F, In, never, E, Exclude<R, Scope.Scope>>D,
df: (_: D) => Effect.Effect<F, E, R>df: (_: D = never_: function (type parameter) D in <E, R, B = never, C = never, D = never, F = never>(ab: (_: Stream<In>) => B, bc: (_: B) => C, cd: (_: C) => D, df: (_: D) => Effect.Effect<F, E, R>): Sink<F, In, never, E, Exclude<R, Scope.Scope>>D) => import EffectEffect.type Effect.Effect = /*unresolved*/ anyEffect<function (type parameter) F in <E, R, B = never, C = never, D = never, F = never>(ab: (_: Stream<In>) => B, bc: (_: B) => C, cd: (_: C) => D, df: (_: D) => Effect.Effect<F, E, R>): Sink<F, In, never, E, Exclude<R, Scope.Scope>>F, function (type parameter) E in <E, R, B = never, C = never, D = never, F = never>(ab: (_: Stream<In>) => B, bc: (_: B) => C, cd: (_: C) => D, df: (_: D) => Effect.Effect<F, E, R>): Sink<F, In, never, E, Exclude<R, Scope.Scope>>E, function (type parameter) R in <E, R, B = never, C = never, D = never, F = never>(ab: (_: Stream<In>) => B, bc: (_: B) => C, cd: (_: C) => D, df: (_: D) => Effect.Effect<F, E, R>): Sink<F, In, never, E, Exclude<R, Scope.Scope>>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<function (type parameter) F in <E, R, B = never, C = never, D = never, F = never>(ab: (_: Stream<In>) => B, bc: (_: B) => C, cd: (_: C) => D, df: (_: D) => Effect.Effect<F, E, R>): Sink<F, In, never, E, Exclude<R, Scope.Scope>>F, function (type parameter) In in Constructor<In>In, never, function (type parameter) E in <E, R, B = never, C = never, D = never, F = never>(ab: (_: Stream<In>) => B, bc: (_: B) => C, cd: (_: C) => D, df: (_: D) => Effect.Effect<F, E, R>): Sink<F, In, never, E, Exclude<R, Scope.Scope>>E, type Exclude<T, U> = T extends U
? never
: T
Exclude from T those types that are assignable to U
Exclude<function (type parameter) R in <E, R, B = never, C = never, D = never, F = never>(ab: (_: Stream<In>) => B, bc: (_: B) => C, cd: (_: C) => D, df: (_: D) => Effect.Effect<F, E, R>): Sink<F, In, never, E, Exclude<R, Scope.Scope>>R, import ScopeScope.type Scope.Scope = /*unresolved*/ anyScope>>
<function (type parameter) E in <E, R, B = never, C = never, D = never, F = never, G = never>(ab: (_: Stream<In>) => B, bc: (_: B) => C, cd: (_: C) => D, df: (_: D) => F, fg: (_: F) => Effect.Effect<G, E, R>): Sink<G, In, never, E, Exclude<R, Scope.Scope>>E, function (type parameter) R in <E, R, B = never, C = never, D = never, F = never, G = never>(ab: (_: Stream<In>) => B, bc: (_: B) => C, cd: (_: C) => D, df: (_: D) => F, fg: (_: F) => Effect.Effect<G, E, R>): Sink<G, In, never, E, Exclude<R, Scope.Scope>>R, function (type parameter) B in <E, R, B = never, C = never, D = never, F = never, G = never>(ab: (_: Stream<In>) => B, bc: (_: B) => C, cd: (_: C) => D, df: (_: D) => F, fg: (_: F) => Effect.Effect<G, E, R>): Sink<G, In, never, E, Exclude<R, Scope.Scope>>B = never, function (type parameter) C in <E, R, B = never, C = never, D = never, F = never, G = never>(ab: (_: Stream<In>) => B, bc: (_: B) => C, cd: (_: C) => D, df: (_: D) => F, fg: (_: F) => Effect.Effect<G, E, R>): Sink<G, In, never, E, Exclude<R, Scope.Scope>>C = never, function (type parameter) D in <E, R, B = never, C = never, D = never, F = never, G = never>(ab: (_: Stream<In>) => B, bc: (_: B) => C, cd: (_: C) => D, df: (_: D) => F, fg: (_: F) => Effect.Effect<G, E, R>): Sink<G, In, never, E, Exclude<R, Scope.Scope>>D = never, function (type parameter) F in <E, R, B = never, C = never, D = never, F = never, G = never>(ab: (_: Stream<In>) => B, bc: (_: B) => C, cd: (_: C) => D, df: (_: D) => F, fg: (_: F) => Effect.Effect<G, E, R>): Sink<G, In, never, E, Exclude<R, Scope.Scope>>F = never, function (type parameter) G in <E, R, B = never, C = never, D = never, F = never, G = never>(ab: (_: Stream<In>) => B, bc: (_: B) => C, cd: (_: C) => D, df: (_: D) => F, fg: (_: F) => Effect.Effect<G, E, R>): Sink<G, In, never, E, Exclude<R, Scope.Scope>>G = never>(
ab: (_: Stream<In>) => Bab: (_: Stream<In>(parameter) _: {
channel: Channel.Channel<Arr.NonEmptyReadonlyArray<A>, E, void, unknown, unknown, unknown, R>;
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; <…;
}
_: interface Stream<out A, out E = never, out R = never>A Stream<A, E, R> describes a program that can emit many A values, fail
with E, and require R.
Details
Streams are pull-based with backpressure and emit chunks to amortize effect
evaluation. They support monadic composition and error handling similar to
Effect, adapted for multiple values.
Example (Creating and consuming streams)
import { Console, Effect, Stream } from "effect"
const program = Effect.gen(function*() {
yield* Stream.make(1, 2, 3).pipe(
Stream.map((n) => n * 2),
Stream.runForEach((n) => Console.log(n))
)
})
Effect.runPromise(program)
// Output:
// 2
// 4
// 6
Stream<function (type parameter) In in Constructor<In>In>) => function (type parameter) B in <E, R, B = never, C = never, D = never, F = never, G = never>(ab: (_: Stream<In>) => B, bc: (_: B) => C, cd: (_: C) => D, df: (_: D) => F, fg: (_: F) => Effect.Effect<G, E, R>): Sink<G, In, never, E, Exclude<R, Scope.Scope>>B,
bc: (_: B) => Cbc: (_: B = never_: function (type parameter) B in <E, R, B = never, C = never, D = never, F = never, G = never>(ab: (_: Stream<In>) => B, bc: (_: B) => C, cd: (_: C) => D, df: (_: D) => F, fg: (_: F) => Effect.Effect<G, E, R>): Sink<G, In, never, E, Exclude<R, Scope.Scope>>B) => function (type parameter) C in <E, R, B = never, C = never, D = never, F = never, G = never>(ab: (_: Stream<In>) => B, bc: (_: B) => C, cd: (_: C) => D, df: (_: D) => F, fg: (_: F) => Effect.Effect<G, E, R>): Sink<G, In, never, E, Exclude<R, Scope.Scope>>C,
cd: (_: C) => Dcd: (_: C = never_: function (type parameter) C in <E, R, B = never, C = never, D = never, F = never, G = never>(ab: (_: Stream<In>) => B, bc: (_: B) => C, cd: (_: C) => D, df: (_: D) => F, fg: (_: F) => Effect.Effect<G, E, R>): Sink<G, In, never, E, Exclude<R, Scope.Scope>>C) => function (type parameter) D in <E, R, B = never, C = never, D = never, F = never, G = never>(ab: (_: Stream<In>) => B, bc: (_: B) => C, cd: (_: C) => D, df: (_: D) => F, fg: (_: F) => Effect.Effect<G, E, R>): Sink<G, In, never, E, Exclude<R, Scope.Scope>>D,
df: (_: D) => Fdf: (_: D = never_: function (type parameter) D in <E, R, B = never, C = never, D = never, F = never, G = never>(ab: (_: Stream<In>) => B, bc: (_: B) => C, cd: (_: C) => D, df: (_: D) => F, fg: (_: F) => Effect.Effect<G, E, R>): Sink<G, In, never, E, Exclude<R, Scope.Scope>>D) => function (type parameter) F in <E, R, B = never, C = never, D = never, F = never, G = never>(ab: (_: Stream<In>) => B, bc: (_: B) => C, cd: (_: C) => D, df: (_: D) => F, fg: (_: F) => Effect.Effect<G, E, R>): Sink<G, In, never, E, Exclude<R, Scope.Scope>>F,
fg: (_: F) => Effect.Effect<G, E, R>fg: (_: F = never_: function (type parameter) F in <E, R, B = never, C = never, D = never, F = never, G = never>(ab: (_: Stream<In>) => B, bc: (_: B) => C, cd: (_: C) => D, df: (_: D) => F, fg: (_: F) => Effect.Effect<G, E, R>): Sink<G, In, never, E, Exclude<R, Scope.Scope>>F) => import EffectEffect.type Effect.Effect = /*unresolved*/ anyEffect<function (type parameter) G in <E, R, B = never, C = never, D = never, F = never, G = never>(ab: (_: Stream<In>) => B, bc: (_: B) => C, cd: (_: C) => D, df: (_: D) => F, fg: (_: F) => Effect.Effect<G, E, R>): Sink<G, In, never, E, Exclude<R, Scope.Scope>>G, function (type parameter) E in <E, R, B = never, C = never, D = never, F = never, G = never>(ab: (_: Stream<In>) => B, bc: (_: B) => C, cd: (_: C) => D, df: (_: D) => F, fg: (_: F) => Effect.Effect<G, E, R>): Sink<G, In, never, E, Exclude<R, Scope.Scope>>E, function (type parameter) R in <E, R, B = never, C = never, D = never, F = never, G = never>(ab: (_: Stream<In>) => B, bc: (_: B) => C, cd: (_: C) => D, df: (_: D) => F, fg: (_: F) => Effect.Effect<G, E, R>): Sink<G, In, never, E, Exclude<R, Scope.Scope>>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<function (type parameter) G in <E, R, B = never, C = never, D = never, F = never, G = never>(ab: (_: Stream<In>) => B, bc: (_: B) => C, cd: (_: C) => D, df: (_: D) => F, fg: (_: F) => Effect.Effect<G, E, R>): Sink<G, In, never, E, Exclude<R, Scope.Scope>>G, function (type parameter) In in Constructor<In>In, never, function (type parameter) E in <E, R, B = never, C = never, D = never, F = never, G = never>(ab: (_: Stream<In>) => B, bc: (_: B) => C, cd: (_: C) => D, df: (_: D) => F, fg: (_: F) => Effect.Effect<G, E, R>): Sink<G, In, never, E, Exclude<R, Scope.Scope>>E, type Exclude<T, U> = T extends U
? never
: T
Exclude from T those types that are assignable to U
Exclude<function (type parameter) R in <E, R, B = never, C = never, D = never, F = never, G = never>(ab: (_: Stream<In>) => B, bc: (_: B) => C, cd: (_: C) => D, df: (_: D) => F, fg: (_: F) => Effect.Effect<G, E, R>): Sink<G, In, never, E, Exclude<R, Scope.Scope>>R, import ScopeScope.type Scope.Scope = /*unresolved*/ anyScope>>
<function (type parameter) E in <E, R, B = never, C = never, D = never, F = never, G = never, H = never>(ab: (_: Stream<In>) => B, bc: (_: B) => C, cd: (_: C) => D, df: (_: D) => F, fg: (_: F) => G, gh: (_: G) => Effect.Effect<H, E, R>): Sink<H, In, never, E, Exclude<R, Scope.Scope>>E, function (type parameter) R in <E, R, B = never, C = never, D = never, F = never, G = never, H = never>(ab: (_: Stream<In>) => B, bc: (_: B) => C, cd: (_: C) => D, df: (_: D) => F, fg: (_: F) => G, gh: (_: G) => Effect.Effect<H, E, R>): Sink<H, In, never, E, Exclude<R, Scope.Scope>>R, function (type parameter) B in <E, R, B = never, C = never, D = never, F = never, G = never, H = never>(ab: (_: Stream<In>) => B, bc: (_: B) => C, cd: (_: C) => D, df: (_: D) => F, fg: (_: F) => G, gh: (_: G) => Effect.Effect<H, E, R>): Sink<H, In, never, E, Exclude<R, Scope.Scope>>B = never, function (type parameter) C in <E, R, B = never, C = never, D = never, F = never, G = never, H = never>(ab: (_: Stream<In>) => B, bc: (_: B) => C, cd: (_: C) => D, df: (_: D) => F, fg: (_: F) => G, gh: (_: G) => Effect.Effect<H, E, R>): Sink<H, In, never, E, Exclude<R, Scope.Scope>>C = never, function (type parameter) D in <E, R, B = never, C = never, D = never, F = never, G = never, H = never>(ab: (_: Stream<In>) => B, bc: (_: B) => C, cd: (_: C) => D, df: (_: D) => F, fg: (_: F) => G, gh: (_: G) => Effect.Effect<H, E, R>): Sink<H, In, never, E, Exclude<R, Scope.Scope>>D = never, function (type parameter) F in <E, R, B = never, C = never, D = never, F = never, G = never, H = never>(ab: (_: Stream<In>) => B, bc: (_: B) => C, cd: (_: C) => D, df: (_: D) => F, fg: (_: F) => G, gh: (_: G) => Effect.Effect<H, E, R>): Sink<H, In, never, E, Exclude<R, Scope.Scope>>F = never, function (type parameter) G in <E, R, B = never, C = never, D = never, F = never, G = never, H = never>(ab: (_: Stream<In>) => B, bc: (_: B) => C, cd: (_: C) => D, df: (_: D) => F, fg: (_: F) => G, gh: (_: G) => Effect.Effect<H, E, R>): Sink<H, In, never, E, Exclude<R, Scope.Scope>>G = never, function (type parameter) H in <E, R, B = never, C = never, D = never, F = never, G = never, H = never>(ab: (_: Stream<In>) => B, bc: (_: B) => C, cd: (_: C) => D, df: (_: D) => F, fg: (_: F) => G, gh: (_: G) => Effect.Effect<H, E, R>): Sink<H, In, never, E, Exclude<R, Scope.Scope>>H = never>(
ab: (_: Stream<In>) => Bab: (_: Stream<In>(parameter) _: {
channel: Channel.Channel<Arr.NonEmptyReadonlyArray<A>, E, void, unknown, unknown, unknown, R>;
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; <…;
}
_: interface Stream<out A, out E = never, out R = never>A Stream<A, E, R> describes a program that can emit many A values, fail
with E, and require R.
Details
Streams are pull-based with backpressure and emit chunks to amortize effect
evaluation. They support monadic composition and error handling similar to
Effect, adapted for multiple values.
Example (Creating and consuming streams)
import { Console, Effect, Stream } from "effect"
const program = Effect.gen(function*() {
yield* Stream.make(1, 2, 3).pipe(
Stream.map((n) => n * 2),
Stream.runForEach((n) => Console.log(n))
)
})
Effect.runPromise(program)
// Output:
// 2
// 4
// 6
Stream<function (type parameter) In in Constructor<In>In>) => function (type parameter) B in <E, R, B = never, C = never, D = never, F = never, G = never, H = never>(ab: (_: Stream<In>) => B, bc: (_: B) => C, cd: (_: C) => D, df: (_: D) => F, fg: (_: F) => G, gh: (_: G) => Effect.Effect<H, E, R>): Sink<H, In, never, E, Exclude<R, Scope.Scope>>B,
bc: (_: B) => Cbc: (_: B = never_: function (type parameter) B in <E, R, B = never, C = never, D = never, F = never, G = never, H = never>(ab: (_: Stream<In>) => B, bc: (_: B) => C, cd: (_: C) => D, df: (_: D) => F, fg: (_: F) => G, gh: (_: G) => Effect.Effect<H, E, R>): Sink<H, In, never, E, Exclude<R, Scope.Scope>>B) => function (type parameter) C in <E, R, B = never, C = never, D = never, F = never, G = never, H = never>(ab: (_: Stream<In>) => B, bc: (_: B) => C, cd: (_: C) => D, df: (_: D) => F, fg: (_: F) => G, gh: (_: G) => Effect.Effect<H, E, R>): Sink<H, In, never, E, Exclude<R, Scope.Scope>>C,
cd: (_: C) => Dcd: (_: C = never_: function (type parameter) C in <E, R, B = never, C = never, D = never, F = never, G = never, H = never>(ab: (_: Stream<In>) => B, bc: (_: B) => C, cd: (_: C) => D, df: (_: D) => F, fg: (_: F) => G, gh: (_: G) => Effect.Effect<H, E, R>): Sink<H, In, never, E, Exclude<R, Scope.Scope>>C) => function (type parameter) D in <E, R, B = never, C = never, D = never, F = never, G = never, H = never>(ab: (_: Stream<In>) => B, bc: (_: B) => C, cd: (_: C) => D, df: (_: D) => F, fg: (_: F) => G, gh: (_: G) => Effect.Effect<H, E, R>): Sink<H, In, never, E, Exclude<R, Scope.Scope>>D,
df: (_: D) => Fdf: (_: D = never_: function (type parameter) D in <E, R, B = never, C = never, D = never, F = never, G = never, H = never>(ab: (_: Stream<In>) => B, bc: (_: B) => C, cd: (_: C) => D, df: (_: D) => F, fg: (_: F) => G, gh: (_: G) => Effect.Effect<H, E, R>): Sink<H, In, never, E, Exclude<R, Scope.Scope>>D) => function (type parameter) F in <E, R, B = never, C = never, D = never, F = never, G = never, H = never>(ab: (_: Stream<In>) => B, bc: (_: B) => C, cd: (_: C) => D, df: (_: D) => F, fg: (_: F) => G, gh: (_: G) => Effect.Effect<H, E, R>): Sink<H, In, never, E, Exclude<R, Scope.Scope>>F,
fg: (_: F) => Gfg: (_: F = never_: function (type parameter) F in <E, R, B = never, C = never, D = never, F = never, G = never, H = never>(ab: (_: Stream<In>) => B, bc: (_: B) => C, cd: (_: C) => D, df: (_: D) => F, fg: (_: F) => G, gh: (_: G) => Effect.Effect<H, E, R>): Sink<H, In, never, E, Exclude<R, Scope.Scope>>F) => function (type parameter) G in <E, R, B = never, C = never, D = never, F = never, G = never, H = never>(ab: (_: Stream<In>) => B, bc: (_: B) => C, cd: (_: C) => D, df: (_: D) => F, fg: (_: F) => G, gh: (_: G) => Effect.Effect<H, E, R>): Sink<H, In, never, E, Exclude<R, Scope.Scope>>G,
gh: (_: G) => Effect.Effect<H, E, R>gh: (_: G = never_: function (type parameter) G in <E, R, B = never, C = never, D = never, F = never, G = never, H = never>(ab: (_: Stream<In>) => B, bc: (_: B) => C, cd: (_: C) => D, df: (_: D) => F, fg: (_: F) => G, gh: (_: G) => Effect.Effect<H, E, R>): Sink<H, In, never, E, Exclude<R, Scope.Scope>>G) => import EffectEffect.type Effect.Effect = /*unresolved*/ anyEffect<function (type parameter) H in <E, R, B = never, C = never, D = never, F = never, G = never, H = never>(ab: (_: Stream<In>) => B, bc: (_: B) => C, cd: (_: C) => D, df: (_: D) => F, fg: (_: F) => G, gh: (_: G) => Effect.Effect<H, E, R>): Sink<H, In, never, E, Exclude<R, Scope.Scope>>H, function (type parameter) E in <E, R, B = never, C = never, D = never, F = never, G = never, H = never>(ab: (_: Stream<In>) => B, bc: (_: B) => C, cd: (_: C) => D, df: (_: D) => F, fg: (_: F) => G, gh: (_: G) => Effect.Effect<H, E, R>): Sink<H, In, never, E, Exclude<R, Scope.Scope>>E, function (type parameter) R in <E, R, B = never, C = never, D = never, F = never, G = never, H = never>(ab: (_: Stream<In>) => B, bc: (_: B) => C, cd: (_: C) => D, df: (_: D) => F, fg: (_: F) => G, gh: (_: G) => Effect.Effect<H, E, R>): Sink<H, In, never, E, Exclude<R, Scope.Scope>>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<function (type parameter) H in <E, R, B = never, C = never, D = never, F = never, G = never, H = never>(ab: (_: Stream<In>) => B, bc: (_: B) => C, cd: (_: C) => D, df: (_: D) => F, fg: (_: F) => G, gh: (_: G) => Effect.Effect<H, E, R>): Sink<H, In, never, E, Exclude<R, Scope.Scope>>H, function (type parameter) In in Constructor<In>In, never, function (type parameter) E in <E, R, B = never, C = never, D = never, F = never, G = never, H = never>(ab: (_: Stream<In>) => B, bc: (_: B) => C, cd: (_: C) => D, df: (_: D) => F, fg: (_: F) => G, gh: (_: G) => Effect.Effect<H, E, R>): Sink<H, In, never, E, Exclude<R, Scope.Scope>>E, type Exclude<T, U> = T extends U
? never
: T
Exclude from T those types that are assignable to U
Exclude<function (type parameter) R in <E, R, B = never, C = never, D = never, F = never, G = never, H = never>(ab: (_: Stream<In>) => B, bc: (_: B) => C, cd: (_: C) => D, df: (_: D) => F, fg: (_: F) => G, gh: (_: G) => Effect.Effect<H, E, R>): Sink<H, In, never, E, Exclude<R, Scope.Scope>>R, import ScopeScope.type Scope.Scope = /*unresolved*/ anyScope>>
<function (type parameter) E in <E, R, B = never, C = never, D = never, F = never, G = never, H = never, I = never>(ab: (_: Stream<In>) => B, bc: (_: B) => C, cd: (_: C) => D, df: (_: D) => F, fg: (_: F) => G, gh: (_: G) => H, hi: (_: H) => Effect.Effect<I, E, R>): Sink<I, In, never, E, Exclude<R, Scope.Scope>>E, function (type parameter) R in <E, R, B = never, C = never, D = never, F = never, G = never, H = never, I = never>(ab: (_: Stream<In>) => B, bc: (_: B) => C, cd: (_: C) => D, df: (_: D) => F, fg: (_: F) => G, gh: (_: G) => H, hi: (_: H) => Effect.Effect<I, E, R>): Sink<I, In, never, E, Exclude<R, Scope.Scope>>R, function (type parameter) B in <E, R, B = never, C = never, D = never, F = never, G = never, H = never, I = never>(ab: (_: Stream<In>) => B, bc: (_: B) => C, cd: (_: C) => D, df: (_: D) => F, fg: (_: F) => G, gh: (_: G) => H, hi: (_: H) => Effect.Effect<I, E, R>): Sink<I, In, never, E, Exclude<R, Scope.Scope>>B = never, function (type parameter) C in <E, R, B = never, C = never, D = never, F = never, G = never, H = never, I = never>(ab: (_: Stream<In>) => B, bc: (_: B) => C, cd: (_: C) => D, df: (_: D) => F, fg: (_: F) => G, gh: (_: G) => H, hi: (_: H) => Effect.Effect<I, E, R>): Sink<I, In, never, E, Exclude<R, Scope.Scope>>C = never, function (type parameter) D in <E, R, B = never, C = never, D = never, F = never, G = never, H = never, I = never>(ab: (_: Stream<In>) => B, bc: (_: B) => C, cd: (_: C) => D, df: (_: D) => F, fg: (_: F) => G, gh: (_: G) => H, hi: (_: H) => Effect.Effect<I, E, R>): Sink<I, In, never, E, Exclude<R, Scope.Scope>>D = never, function (type parameter) F in <E, R, B = never, C = never, D = never, F = never, G = never, H = never, I = never>(ab: (_: Stream<In>) => B, bc: (_: B) => C, cd: (_: C) => D, df: (_: D) => F, fg: (_: F) => G, gh: (_: G) => H, hi: (_: H) => Effect.Effect<I, E, R>): Sink<I, In, never, E, Exclude<R, Scope.Scope>>F = never, function (type parameter) G in <E, R, B = never, C = never, D = never, F = never, G = never, H = never, I = never>(ab: (_: Stream<In>) => B, bc: (_: B) => C, cd: (_: C) => D, df: (_: D) => F, fg: (_: F) => G, gh: (_: G) => H, hi: (_: H) => Effect.Effect<I, E, R>): Sink<I, In, never, E, Exclude<R, Scope.Scope>>G = never, function (type parameter) H in <E, R, B = never, C = never, D = never, F = never, G = never, H = never, I = never>(ab: (_: Stream<In>) => B, bc: (_: B) => C, cd: (_: C) => D, df: (_: D) => F, fg: (_: F) => G, gh: (_: G) => H, hi: (_: H) => Effect.Effect<I, E, R>): Sink<I, In, never, E, Exclude<R, Scope.Scope>>H = never, function (type parameter) I in <E, R, B = never, C = never, D = never, F = never, G = never, H = never, I = never>(ab: (_: Stream<In>) => B, bc: (_: B) => C, cd: (_: C) => D, df: (_: D) => F, fg: (_: F) => G, gh: (_: G) => H, hi: (_: H) => Effect.Effect<I, E, R>): Sink<I, In, never, E, Exclude<R, Scope.Scope>>I = never>(
ab: (_: Stream<In>) => Bab: (_: Stream<In>(parameter) _: {
channel: Channel.Channel<Arr.NonEmptyReadonlyArray<A>, E, void, unknown, unknown, unknown, R>;
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; <…;
}
_: interface Stream<out A, out E = never, out R = never>A Stream<A, E, R> describes a program that can emit many A values, fail
with E, and require R.
Details
Streams are pull-based with backpressure and emit chunks to amortize effect
evaluation. They support monadic composition and error handling similar to
Effect, adapted for multiple values.
Example (Creating and consuming streams)
import { Console, Effect, Stream } from "effect"
const program = Effect.gen(function*() {
yield* Stream.make(1, 2, 3).pipe(
Stream.map((n) => n * 2),
Stream.runForEach((n) => Console.log(n))
)
})
Effect.runPromise(program)
// Output:
// 2
// 4
// 6
Stream<function (type parameter) In in Constructor<In>In>) => function (type parameter) B in <E, R, B = never, C = never, D = never, F = never, G = never, H = never, I = never>(ab: (_: Stream<In>) => B, bc: (_: B) => C, cd: (_: C) => D, df: (_: D) => F, fg: (_: F) => G, gh: (_: G) => H, hi: (_: H) => Effect.Effect<I, E, R>): Sink<I, In, never, E, Exclude<R, Scope.Scope>>B,
bc: (_: B) => Cbc: (_: B = never_: function (type parameter) B in <E, R, B = never, C = never, D = never, F = never, G = never, H = never, I = never>(ab: (_: Stream<In>) => B, bc: (_: B) => C, cd: (_: C) => D, df: (_: D) => F, fg: (_: F) => G, gh: (_: G) => H, hi: (_: H) => Effect.Effect<I, E, R>): Sink<I, In, never, E, Exclude<R, Scope.Scope>>B) => function (type parameter) C in <E, R, B = never, C = never, D = never, F = never, G = never, H = never, I = never>(ab: (_: Stream<In>) => B, bc: (_: B) => C, cd: (_: C) => D, df: (_: D) => F, fg: (_: F) => G, gh: (_: G) => H, hi: (_: H) => Effect.Effect<I, E, R>): Sink<I, In, never, E, Exclude<R, Scope.Scope>>C,
cd: (_: C) => Dcd: (_: C = never_: function (type parameter) C in <E, R, B = never, C = never, D = never, F = never, G = never, H = never, I = never>(ab: (_: Stream<In>) => B, bc: (_: B) => C, cd: (_: C) => D, df: (_: D) => F, fg: (_: F) => G, gh: (_: G) => H, hi: (_: H) => Effect.Effect<I, E, R>): Sink<I, In, never, E, Exclude<R, Scope.Scope>>C) => function (type parameter) D in <E, R, B = never, C = never, D = never, F = never, G = never, H = never, I = never>(ab: (_: Stream<In>) => B, bc: (_: B) => C, cd: (_: C) => D, df: (_: D) => F, fg: (_: F) => G, gh: (_: G) => H, hi: (_: H) => Effect.Effect<I, E, R>): Sink<I, In, never, E, Exclude<R, Scope.Scope>>D,
df: (_: D) => Fdf: (_: D = never_: function (type parameter) D in <E, R, B = never, C = never, D = never, F = never, G = never, H = never, I = never>(ab: (_: Stream<In>) => B, bc: (_: B) => C, cd: (_: C) => D, df: (_: D) => F, fg: (_: F) => G, gh: (_: G) => H, hi: (_: H) => Effect.Effect<I, E, R>): Sink<I, In, never, E, Exclude<R, Scope.Scope>>D) => function (type parameter) F in <E, R, B = never, C = never, D = never, F = never, G = never, H = never, I = never>(ab: (_: Stream<In>) => B, bc: (_: B) => C, cd: (_: C) => D, df: (_: D) => F, fg: (_: F) => G, gh: (_: G) => H, hi: (_: H) => Effect.Effect<I, E, R>): Sink<I, In, never, E, Exclude<R, Scope.Scope>>F,
fg: (_: F) => Gfg: (_: F = never_: function (type parameter) F in <E, R, B = never, C = never, D = never, F = never, G = never, H = never, I = never>(ab: (_: Stream<In>) => B, bc: (_: B) => C, cd: (_: C) => D, df: (_: D) => F, fg: (_: F) => G, gh: (_: G) => H, hi: (_: H) => Effect.Effect<I, E, R>): Sink<I, In, never, E, Exclude<R, Scope.Scope>>F) => function (type parameter) G in <E, R, B = never, C = never, D = never, F = never, G = never, H = never, I = never>(ab: (_: Stream<In>) => B, bc: (_: B) => C, cd: (_: C) => D, df: (_: D) => F, fg: (_: F) => G, gh: (_: G) => H, hi: (_: H) => Effect.Effect<I, E, R>): Sink<I, In, never, E, Exclude<R, Scope.Scope>>G,
gh: (_: G) => Hgh: (_: G = never_: function (type parameter) G in <E, R, B = never, C = never, D = never, F = never, G = never, H = never, I = never>(ab: (_: Stream<In>) => B, bc: (_: B) => C, cd: (_: C) => D, df: (_: D) => F, fg: (_: F) => G, gh: (_: G) => H, hi: (_: H) => Effect.Effect<I, E, R>): Sink<I, In, never, E, Exclude<R, Scope.Scope>>G) => function (type parameter) H in <E, R, B = never, C = never, D = never, F = never, G = never, H = never, I = never>(ab: (_: Stream<In>) => B, bc: (_: B) => C, cd: (_: C) => D, df: (_: D) => F, fg: (_: F) => G, gh: (_: G) => H, hi: (_: H) => Effect.Effect<I, E, R>): Sink<I, In, never, E, Exclude<R, Scope.Scope>>H,
hi: (_: H) => Effect.Effect<I, E, R>hi: (_: H = never_: function (type parameter) H in <E, R, B = never, C = never, D = never, F = never, G = never, H = never, I = never>(ab: (_: Stream<In>) => B, bc: (_: B) => C, cd: (_: C) => D, df: (_: D) => F, fg: (_: F) => G, gh: (_: G) => H, hi: (_: H) => Effect.Effect<I, E, R>): Sink<I, In, never, E, Exclude<R, Scope.Scope>>H) => import EffectEffect.type Effect.Effect = /*unresolved*/ anyEffect<function (type parameter) I in <E, R, B = never, C = never, D = never, F = never, G = never, H = never, I = never>(ab: (_: Stream<In>) => B, bc: (_: B) => C, cd: (_: C) => D, df: (_: D) => F, fg: (_: F) => G, gh: (_: G) => H, hi: (_: H) => Effect.Effect<I, E, R>): Sink<I, In, never, E, Exclude<R, Scope.Scope>>I, function (type parameter) E in <E, R, B = never, C = never, D = never, F = never, G = never, H = never, I = never>(ab: (_: Stream<In>) => B, bc: (_: B) => C, cd: (_: C) => D, df: (_: D) => F, fg: (_: F) => G, gh: (_: G) => H, hi: (_: H) => Effect.Effect<I, E, R>): Sink<I, In, never, E, Exclude<R, Scope.Scope>>E, function (type parameter) R in <E, R, B = never, C = never, D = never, F = never, G = never, H = never, I = never>(ab: (_: Stream<In>) => B, bc: (_: B) => C, cd: (_: C) => D, df: (_: D) => F, fg: (_: F) => G, gh: (_: G) => H, hi: (_: H) => Effect.Effect<I, E, R>): Sink<I, In, never, E, Exclude<R, Scope.Scope>>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<function (type parameter) I in <E, R, B = never, C = never, D = never, F = never, G = never, H = never, I = never>(ab: (_: Stream<In>) => B, bc: (_: B) => C, cd: (_: C) => D, df: (_: D) => F, fg: (_: F) => G, gh: (_: G) => H, hi: (_: H) => Effect.Effect<I, E, R>): Sink<I, In, never, E, Exclude<R, Scope.Scope>>I, function (type parameter) In in Constructor<In>In, never, function (type parameter) E in <E, R, B = never, C = never, D = never, F = never, G = never, H = never, I = never>(ab: (_: Stream<In>) => B, bc: (_: B) => C, cd: (_: C) => D, df: (_: D) => F, fg: (_: F) => G, gh: (_: G) => H, hi: (_: H) => Effect.Effect<I, E, R>): Sink<I, In, never, E, Exclude<R, Scope.Scope>>E, type Exclude<T, U> = T extends U
? never
: T
Exclude from T those types that are assignable to U
Exclude<function (type parameter) R in <E, R, B = never, C = never, D = never, F = never, G = never, H = never, I = never>(ab: (_: Stream<In>) => B, bc: (_: B) => C, cd: (_: C) => D, df: (_: D) => F, fg: (_: F) => G, gh: (_: G) => H, hi: (_: H) => Effect.Effect<I, E, R>): Sink<I, In, never, E, Exclude<R, Scope.Scope>>R, import ScopeScope.type Scope.Scope = /*unresolved*/ anyScope>>
<function (type parameter) E in <E, R, B = never, C = never, D = never, F = never, G = never, H = never, I = never, J = never>(ab: (_: Stream<In>) => B, bc: (_: B) => C, cd: (_: C) => D, df: (_: D) => F, fg: (_: F) => G, gh: (_: G) => H, hi: (_: H) => I, ij: (_: I) => Effect.Effect<J, E, R>): Sink<J, In, never, E, Exclude<R, Scope.Scope>>E, function (type parameter) R in <E, R, B = never, C = never, D = never, F = never, G = never, H = never, I = never, J = never>(ab: (_: Stream<In>) => B, bc: (_: B) => C, cd: (_: C) => D, df: (_: D) => F, fg: (_: F) => G, gh: (_: G) => H, hi: (_: H) => I, ij: (_: I) => Effect.Effect<J, E, R>): Sink<J, In, never, E, Exclude<R, Scope.Scope>>R, function (type parameter) B in <E, R, B = never, C = never, D = never, F = never, G = never, H = never, I = never, J = never>(ab: (_: Stream<In>) => B, bc: (_: B) => C, cd: (_: C) => D, df: (_: D) => F, fg: (_: F) => G, gh: (_: G) => H, hi: (_: H) => I, ij: (_: I) => Effect.Effect<J, E, R>): Sink<J, In, never, E, Exclude<R, Scope.Scope>>B = never, function (type parameter) C in <E, R, B = never, C = never, D = never, F = never, G = never, H = never, I = never, J = never>(ab: (_: Stream<In>) => B, bc: (_: B) => C, cd: (_: C) => D, df: (_: D) => F, fg: (_: F) => G, gh: (_: G) => H, hi: (_: H) => I, ij: (_: I) => Effect.Effect<J, E, R>): Sink<J, In, never, E, Exclude<R, Scope.Scope>>C = never, function (type parameter) D in <E, R, B = never, C = never, D = never, F = never, G = never, H = never, I = never, J = never>(ab: (_: Stream<In>) => B, bc: (_: B) => C, cd: (_: C) => D, df: (_: D) => F, fg: (_: F) => G, gh: (_: G) => H, hi: (_: H) => I, ij: (_: I) => Effect.Effect<J, E, R>): Sink<J, In, never, E, Exclude<R, Scope.Scope>>D = never, function (type parameter) F in <E, R, B = never, C = never, D = never, F = never, G = never, H = never, I = never, J = never>(ab: (_: Stream<In>) => B, bc: (_: B) => C, cd: (_: C) => D, df: (_: D) => F, fg: (_: F) => G, gh: (_: G) => H, hi: (_: H) => I, ij: (_: I) => Effect.Effect<J, E, R>): Sink<J, In, never, E, Exclude<R, Scope.Scope>>F = never, function (type parameter) G in <E, R, B = never, C = never, D = never, F = never, G = never, H = never, I = never, J = never>(ab: (_: Stream<In>) => B, bc: (_: B) => C, cd: (_: C) => D, df: (_: D) => F, fg: (_: F) => G, gh: (_: G) => H, hi: (_: H) => I, ij: (_: I) => Effect.Effect<J, E, R>): Sink<J, In, never, E, Exclude<R, Scope.Scope>>G = never, function (type parameter) H in <E, R, B = never, C = never, D = never, F = never, G = never, H = never, I = never, J = never>(ab: (_: Stream<In>) => B, bc: (_: B) => C, cd: (_: C) => D, df: (_: D) => F, fg: (_: F) => G, gh: (_: G) => H, hi: (_: H) => I, ij: (_: I) => Effect.Effect<J, E, R>): Sink<J, In, never, E, Exclude<R, Scope.Scope>>H = never, function (type parameter) I in <E, R, B = never, C = never, D = never, F = never, G = never, H = never, I = never, J = never>(ab: (_: Stream<In>) => B, bc: (_: B) => C, cd: (_: C) => D, df: (_: D) => F, fg: (_: F) => G, gh: (_: G) => H, hi: (_: H) => I, ij: (_: I) => Effect.Effect<J, E, R>): Sink<J, In, never, E, Exclude<R, Scope.Scope>>I = never, function (type parameter) J in <E, R, B = never, C = never, D = never, F = never, G = never, H = never, I = never, J = never>(ab: (_: Stream<In>) => B, bc: (_: B) => C, cd: (_: C) => D, df: (_: D) => F, fg: (_: F) => G, gh: (_: G) => H, hi: (_: H) => I, ij: (_: I) => Effect.Effect<J, E, R>): Sink<J, In, never, E, Exclude<R, Scope.Scope>>J = never>(
ab: (_: Stream<In>) => Bab: (_: Stream<In>(parameter) _: {
channel: Channel.Channel<Arr.NonEmptyReadonlyArray<A>, E, void, unknown, unknown, unknown, R>;
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; <…;
}
_: interface Stream<out A, out E = never, out R = never>A Stream<A, E, R> describes a program that can emit many A values, fail
with E, and require R.
Details
Streams are pull-based with backpressure and emit chunks to amortize effect
evaluation. They support monadic composition and error handling similar to
Effect, adapted for multiple values.
Example (Creating and consuming streams)
import { Console, Effect, Stream } from "effect"
const program = Effect.gen(function*() {
yield* Stream.make(1, 2, 3).pipe(
Stream.map((n) => n * 2),
Stream.runForEach((n) => Console.log(n))
)
})
Effect.runPromise(program)
// Output:
// 2
// 4
// 6
Stream<function (type parameter) In in Constructor<In>In>) => function (type parameter) B in <E, R, B = never, C = never, D = never, F = never, G = never, H = never, I = never, J = never>(ab: (_: Stream<In>) => B, bc: (_: B) => C, cd: (_: C) => D, df: (_: D) => F, fg: (_: F) => G, gh: (_: G) => H, hi: (_: H) => I, ij: (_: I) => Effect.Effect<J, E, R>): Sink<J, In, never, E, Exclude<R, Scope.Scope>>B,
bc: (_: B) => Cbc: (_: B = never_: function (type parameter) B in <E, R, B = never, C = never, D = never, F = never, G = never, H = never, I = never, J = never>(ab: (_: Stream<In>) => B, bc: (_: B) => C, cd: (_: C) => D, df: (_: D) => F, fg: (_: F) => G, gh: (_: G) => H, hi: (_: H) => I, ij: (_: I) => Effect.Effect<J, E, R>): Sink<J, In, never, E, Exclude<R, Scope.Scope>>B) => function (type parameter) C in <E, R, B = never, C = never, D = never, F = never, G = never, H = never, I = never, J = never>(ab: (_: Stream<In>) => B, bc: (_: B) => C, cd: (_: C) => D, df: (_: D) => F, fg: (_: F) => G, gh: (_: G) => H, hi: (_: H) => I, ij: (_: I) => Effect.Effect<J, E, R>): Sink<J, In, never, E, Exclude<R, Scope.Scope>>C,
cd: (_: C) => Dcd: (_: C = never_: function (type parameter) C in <E, R, B = never, C = never, D = never, F = never, G = never, H = never, I = never, J = never>(ab: (_: Stream<In>) => B, bc: (_: B) => C, cd: (_: C) => D, df: (_: D) => F, fg: (_: F) => G, gh: (_: G) => H, hi: (_: H) => I, ij: (_: I) => Effect.Effect<J, E, R>): Sink<J, In, never, E, Exclude<R, Scope.Scope>>C) => function (type parameter) D in <E, R, B = never, C = never, D = never, F = never, G = never, H = never, I = never, J = never>(ab: (_: Stream<In>) => B, bc: (_: B) => C, cd: (_: C) => D, df: (_: D) => F, fg: (_: F) => G, gh: (_: G) => H, hi: (_: H) => I, ij: (_: I) => Effect.Effect<J, E, R>): Sink<J, In, never, E, Exclude<R, Scope.Scope>>D,
df: (_: D) => Fdf: (_: D = never_: function (type parameter) D in <E, R, B = never, C = never, D = never, F = never, G = never, H = never, I = never, J = never>(ab: (_: Stream<In>) => B, bc: (_: B) => C, cd: (_: C) => D, df: (_: D) => F, fg: (_: F) => G, gh: (_: G) => H, hi: (_: H) => I, ij: (_: I) => Effect.Effect<J, E, R>): Sink<J, In, never, E, Exclude<R, Scope.Scope>>D) => function (type parameter) F in <E, R, B = never, C = never, D = never, F = never, G = never, H = never, I = never, J = never>(ab: (_: Stream<In>) => B, bc: (_: B) => C, cd: (_: C) => D, df: (_: D) => F, fg: (_: F) => G, gh: (_: G) => H, hi: (_: H) => I, ij: (_: I) => Effect.Effect<J, E, R>): Sink<J, In, never, E, Exclude<R, Scope.Scope>>F,
fg: (_: F) => Gfg: (_: F = never_: function (type parameter) F in <E, R, B = never, C = never, D = never, F = never, G = never, H = never, I = never, J = never>(ab: (_: Stream<In>) => B, bc: (_: B) => C, cd: (_: C) => D, df: (_: D) => F, fg: (_: F) => G, gh: (_: G) => H, hi: (_: H) => I, ij: (_: I) => Effect.Effect<J, E, R>): Sink<J, In, never, E, Exclude<R, Scope.Scope>>F) => function (type parameter) G in <E, R, B = never, C = never, D = never, F = never, G = never, H = never, I = never, J = never>(ab: (_: Stream<In>) => B, bc: (_: B) => C, cd: (_: C) => D, df: (_: D) => F, fg: (_: F) => G, gh: (_: G) => H, hi: (_: H) => I, ij: (_: I) => Effect.Effect<J, E, R>): Sink<J, In, never, E, Exclude<R, Scope.Scope>>G,
gh: (_: G) => Hgh: (_: G = never_: function (type parameter) G in <E, R, B = never, C = never, D = never, F = never, G = never, H = never, I = never, J = never>(ab: (_: Stream<In>) => B, bc: (_: B) => C, cd: (_: C) => D, df: (_: D) => F, fg: (_: F) => G, gh: (_: G) => H, hi: (_: H) => I, ij: (_: I) => Effect.Effect<J, E, R>): Sink<J, In, never, E, Exclude<R, Scope.Scope>>G) => function (type parameter) H in <E, R, B = never, C = never, D = never, F = never, G = never, H = never, I = never, J = never>(ab: (_: Stream<In>) => B, bc: (_: B) => C, cd: (_: C) => D, df: (_: D) => F, fg: (_: F) => G, gh: (_: G) => H, hi: (_: H) => I, ij: (_: I) => Effect.Effect<J, E, R>): Sink<J, In, never, E, Exclude<R, Scope.Scope>>H,
hi: (_: H) => Ihi: (_: H = never_: function (type parameter) H in <E, R, B = never, C = never, D = never, F = never, G = never, H = never, I = never, J = never>(ab: (_: Stream<In>) => B, bc: (_: B) => C, cd: (_: C) => D, df: (_: D) => F, fg: (_: F) => G, gh: (_: G) => H, hi: (_: H) => I, ij: (_: I) => Effect.Effect<J, E, R>): Sink<J, In, never, E, Exclude<R, Scope.Scope>>H) => function (type parameter) I in <E, R, B = never, C = never, D = never, F = never, G = never, H = never, I = never, J = never>(ab: (_: Stream<In>) => B, bc: (_: B) => C, cd: (_: C) => D, df: (_: D) => F, fg: (_: F) => G, gh: (_: G) => H, hi: (_: H) => I, ij: (_: I) => Effect.Effect<J, E, R>): Sink<J, In, never, E, Exclude<R, Scope.Scope>>I,
ij: (_: I) => Effect.Effect<J, E, R>ij: (_: I = never_: function (type parameter) I in <E, R, B = never, C = never, D = never, F = never, G = never, H = never, I = never, J = never>(ab: (_: Stream<In>) => B, bc: (_: B) => C, cd: (_: C) => D, df: (_: D) => F, fg: (_: F) => G, gh: (_: G) => H, hi: (_: H) => I, ij: (_: I) => Effect.Effect<J, E, R>): Sink<J, In, never, E, Exclude<R, Scope.Scope>>I) => import EffectEffect.type Effect.Effect = /*unresolved*/ anyEffect<function (type parameter) J in <E, R, B = never, C = never, D = never, F = never, G = never, H = never, I = never, J = never>(ab: (_: Stream<In>) => B, bc: (_: B) => C, cd: (_: C) => D, df: (_: D) => F, fg: (_: F) => G, gh: (_: G) => H, hi: (_: H) => I, ij: (_: I) => Effect.Effect<J, E, R>): Sink<J, In, never, E, Exclude<R, Scope.Scope>>J, function (type parameter) E in <E, R, B = never, C = never, D = never, F = never, G = never, H = never, I = never, J = never>(ab: (_: Stream<In>) => B, bc: (_: B) => C, cd: (_: C) => D, df: (_: D) => F, fg: (_: F) => G, gh: (_: G) => H, hi: (_: H) => I, ij: (_: I) => Effect.Effect<J, E, R>): Sink<J, In, never, E, Exclude<R, Scope.Scope>>E, function (type parameter) R in <E, R, B = never, C = never, D = never, F = never, G = never, H = never, I = never, J = never>(ab: (_: Stream<In>) => B, bc: (_: B) => C, cd: (_: C) => D, df: (_: D) => F, fg: (_: F) => G, gh: (_: G) => H, hi: (_: H) => I, ij: (_: I) => Effect.Effect<J, E, R>): Sink<J, In, never, E, Exclude<R, Scope.Scope>>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<function (type parameter) J in <E, R, B = never, C = never, D = never, F = never, G = never, H = never, I = never, J = never>(ab: (_: Stream<In>) => B, bc: (_: B) => C, cd: (_: C) => D, df: (_: D) => F, fg: (_: F) => G, gh: (_: G) => H, hi: (_: H) => I, ij: (_: I) => Effect.Effect<J, E, R>): Sink<J, In, never, E, Exclude<R, Scope.Scope>>J, function (type parameter) In in Constructor<In>In, never, function (type parameter) E in <E, R, B = never, C = never, D = never, F = never, G = never, H = never, I = never, J = never>(ab: (_: Stream<In>) => B, bc: (_: B) => C, cd: (_: C) => D, df: (_: D) => F, fg: (_: F) => G, gh: (_: G) => H, hi: (_: H) => I, ij: (_: I) => Effect.Effect<J, E, R>): Sink<J, In, never, E, Exclude<R, Scope.Scope>>E, type Exclude<T, U> = T extends U
? never
: T
Exclude from T those types that are assignable to U
Exclude<function (type parameter) R in <E, R, B = never, C = never, D = never, F = never, G = never, H = never, I = never, J = never>(ab: (_: Stream<In>) => B, bc: (_: B) => C, cd: (_: C) => D, df: (_: D) => F, fg: (_: F) => G, gh: (_: G) => H, hi: (_: H) => I, ij: (_: I) => Effect.Effect<J, E, R>): Sink<J, In, never, E, Exclude<R, Scope.Scope>>R, import ScopeScope.type Scope.Scope = /*unresolved*/ anyScope>>
<function (type parameter) E in <E, R, B = never, C = never, D = never, F = never, G = never, H = never, I = never, J = never, K = never>(ab: (_: Stream<In>) => B, bc: (_: B) => C, cd: (_: C) => D, df: (_: D) => F, fg: (_: F) => G, gh: (_: G) => H, hi: (_: H) => I, ij: (_: I) => J, jk: (_: J) => Effect.Effect<K, E, R>): Sink<K, In, never, E, Exclude<R, Scope.Scope>>E, function (type parameter) R in <E, R, B = never, C = never, D = never, F = never, G = never, H = never, I = never, J = never, K = never>(ab: (_: Stream<In>) => B, bc: (_: B) => C, cd: (_: C) => D, df: (_: D) => F, fg: (_: F) => G, gh: (_: G) => H, hi: (_: H) => I, ij: (_: I) => J, jk: (_: J) => Effect.Effect<K, E, R>): Sink<K, In, never, E, Exclude<R, Scope.Scope>>R, function (type parameter) B in <E, R, B = never, C = never, D = never, F = never, G = never, H = never, I = never, J = never, K = never>(ab: (_: Stream<In>) => B, bc: (_: B) => C, cd: (_: C) => D, df: (_: D) => F, fg: (_: F) => G, gh: (_: G) => H, hi: (_: H) => I, ij: (_: I) => J, jk: (_: J) => Effect.Effect<K, E, R>): Sink<K, In, never, E, Exclude<R, Scope.Scope>>B = never, function (type parameter) C in <E, R, B = never, C = never, D = never, F = never, G = never, H = never, I = never, J = never, K = never>(ab: (_: Stream<In>) => B, bc: (_: B) => C, cd: (_: C) => D, df: (_: D) => F, fg: (_: F) => G, gh: (_: G) => H, hi: (_: H) => I, ij: (_: I) => J, jk: (_: J) => Effect.Effect<K, E, R>): Sink<K, In, never, E, Exclude<R, Scope.Scope>>C = never, function (type parameter) D in <E, R, B = never, C = never, D = never, F = never, G = never, H = never, I = never, J = never, K = never>(ab: (_: Stream<In>) => B, bc: (_: B) => C, cd: (_: C) => D, df: (_: D) => F, fg: (_: F) => G, gh: (_: G) => H, hi: (_: H) => I, ij: (_: I) => J, jk: (_: J) => Effect.Effect<K, E, R>): Sink<K, In, never, E, Exclude<R, Scope.Scope>>D = never, function (type parameter) F in <E, R, B = never, C = never, D = never, F = never, G = never, H = never, I = never, J = never, K = never>(ab: (_: Stream<In>) => B, bc: (_: B) => C, cd: (_: C) => D, df: (_: D) => F, fg: (_: F) => G, gh: (_: G) => H, hi: (_: H) => I, ij: (_: I) => J, jk: (_: J) => Effect.Effect<K, E, R>): Sink<K, In, never, E, Exclude<R, Scope.Scope>>F = never, function (type parameter) G in <E, R, B = never, C = never, D = never, F = never, G = never, H = never, I = never, J = never, K = never>(ab: (_: Stream<In>) => B, bc: (_: B) => C, cd: (_: C) => D, df: (_: D) => F, fg: (_: F) => G, gh: (_: G) => H, hi: (_: H) => I, ij: (_: I) => J, jk: (_: J) => Effect.Effect<K, E, R>): Sink<K, In, never, E, Exclude<R, Scope.Scope>>G = never, function (type parameter) H in <E, R, B = never, C = never, D = never, F = never, G = never, H = never, I = never, J = never, K = never>(ab: (_: Stream<In>) => B, bc: (_: B) => C, cd: (_: C) => D, df: (_: D) => F, fg: (_: F) => G, gh: (_: G) => H, hi: (_: H) => I, ij: (_: I) => J, jk: (_: J) => Effect.Effect<K, E, R>): Sink<K, In, never, E, Exclude<R, Scope.Scope>>H = never, function (type parameter) I in <E, R, B = never, C = never, D = never, F = never, G = never, H = never, I = never, J = never, K = never>(ab: (_: Stream<In>) => B, bc: (_: B) => C, cd: (_: C) => D, df: (_: D) => F, fg: (_: F) => G, gh: (_: G) => H, hi: (_: H) => I, ij: (_: I) => J, jk: (_: J) => Effect.Effect<K, E, R>): Sink<K, In, never, E, Exclude<R, Scope.Scope>>I = never, function (type parameter) J in <E, R, B = never, C = never, D = never, F = never, G = never, H = never, I = never, J = never, K = never>(ab: (_: Stream<In>) => B, bc: (_: B) => C, cd: (_: C) => D, df: (_: D) => F, fg: (_: F) => G, gh: (_: G) => H, hi: (_: H) => I, ij: (_: I) => J, jk: (_: J) => Effect.Effect<K, E, R>): Sink<K, In, never, E, Exclude<R, Scope.Scope>>J = never, function (type parameter) K in <E, R, B = never, C = never, D = never, F = never, G = never, H = never, I = never, J = never, K = never>(ab: (_: Stream<In>) => B, bc: (_: B) => C, cd: (_: C) => D, df: (_: D) => F, fg: (_: F) => G, gh: (_: G) => H, hi: (_: H) => I, ij: (_: I) => J, jk: (_: J) => Effect.Effect<K, E, R>): Sink<K, In, never, E, Exclude<R, Scope.Scope>>K = never>(
ab: (_: Stream<In>) => Bab: (_: Stream<In>(parameter) _: {
channel: Channel.Channel<Arr.NonEmptyReadonlyArray<A>, E, void, unknown, unknown, unknown, R>;
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; <…;
}
_: interface Stream<out A, out E = never, out R = never>A Stream<A, E, R> describes a program that can emit many A values, fail
with E, and require R.
Details
Streams are pull-based with backpressure and emit chunks to amortize effect
evaluation. They support monadic composition and error handling similar to
Effect, adapted for multiple values.
Example (Creating and consuming streams)
import { Console, Effect, Stream } from "effect"
const program = Effect.gen(function*() {
yield* Stream.make(1, 2, 3).pipe(
Stream.map((n) => n * 2),
Stream.runForEach((n) => Console.log(n))
)
})
Effect.runPromise(program)
// Output:
// 2
// 4
// 6
Stream<function (type parameter) In in Constructor<In>In>) => function (type parameter) B in <E, R, B = never, C = never, D = never, F = never, G = never, H = never, I = never, J = never, K = never>(ab: (_: Stream<In>) => B, bc: (_: B) => C, cd: (_: C) => D, df: (_: D) => F, fg: (_: F) => G, gh: (_: G) => H, hi: (_: H) => I, ij: (_: I) => J, jk: (_: J) => Effect.Effect<K, E, R>): Sink<K, In, never, E, Exclude<R, Scope.Scope>>B,
bc: (_: B) => Cbc: (_: B = never_: function (type parameter) B in <E, R, B = never, C = never, D = never, F = never, G = never, H = never, I = never, J = never, K = never>(ab: (_: Stream<In>) => B, bc: (_: B) => C, cd: (_: C) => D, df: (_: D) => F, fg: (_: F) => G, gh: (_: G) => H, hi: (_: H) => I, ij: (_: I) => J, jk: (_: J) => Effect.Effect<K, E, R>): Sink<K, In, never, E, Exclude<R, Scope.Scope>>B) => function (type parameter) C in <E, R, B = never, C = never, D = never, F = never, G = never, H = never, I = never, J = never, K = never>(ab: (_: Stream<In>) => B, bc: (_: B) => C, cd: (_: C) => D, df: (_: D) => F, fg: (_: F) => G, gh: (_: G) => H, hi: (_: H) => I, ij: (_: I) => J, jk: (_: J) => Effect.Effect<K, E, R>): Sink<K, In, never, E, Exclude<R, Scope.Scope>>C,
cd: (_: C) => Dcd: (_: C = never_: function (type parameter) C in <E, R, B = never, C = never, D = never, F = never, G = never, H = never, I = never, J = never, K = never>(ab: (_: Stream<In>) => B, bc: (_: B) => C, cd: (_: C) => D, df: (_: D) => F, fg: (_: F) => G, gh: (_: G) => H, hi: (_: H) => I, ij: (_: I) => J, jk: (_: J) => Effect.Effect<K, E, R>): Sink<K, In, never, E, Exclude<R, Scope.Scope>>C) => function (type parameter) D in <E, R, B = never, C = never, D = never, F = never, G = never, H = never, I = never, J = never, K = never>(ab: (_: Stream<In>) => B, bc: (_: B) => C, cd: (_: C) => D, df: (_: D) => F, fg: (_: F) => G, gh: (_: G) => H, hi: (_: H) => I, ij: (_: I) => J, jk: (_: J) => Effect.Effect<K, E, R>): Sink<K, In, never, E, Exclude<R, Scope.Scope>>D,
df: (_: D) => Fdf: (_: D = never_: function (type parameter) D in <E, R, B = never, C = never, D = never, F = never, G = never, H = never, I = never, J = never, K = never>(ab: (_: Stream<In>) => B, bc: (_: B) => C, cd: (_: C) => D, df: (_: D) => F, fg: (_: F) => G, gh: (_: G) => H, hi: (_: H) => I, ij: (_: I) => J, jk: (_: J) => Effect.Effect<K, E, R>): Sink<K, In, never, E, Exclude<R, Scope.Scope>>D) => function (type parameter) F in <E, R, B = never, C = never, D = never, F = never, G = never, H = never, I = never, J = never, K = never>(ab: (_: Stream<In>) => B, bc: (_: B) => C, cd: (_: C) => D, df: (_: D) => F, fg: (_: F) => G, gh: (_: G) => H, hi: (_: H) => I, ij: (_: I) => J, jk: (_: J) => Effect.Effect<K, E, R>): Sink<K, In, never, E, Exclude<R, Scope.Scope>>F,
fg: (_: F) => Gfg: (_: F = never_: function (type parameter) F in <E, R, B = never, C = never, D = never, F = never, G = never, H = never, I = never, J = never, K = never>(ab: (_: Stream<In>) => B, bc: (_: B) => C, cd: (_: C) => D, df: (_: D) => F, fg: (_: F) => G, gh: (_: G) => H, hi: (_: H) => I, ij: (_: I) => J, jk: (_: J) => Effect.Effect<K, E, R>): Sink<K, In, never, E, Exclude<R, Scope.Scope>>F) => function (type parameter) G in <E, R, B = never, C = never, D = never, F = never, G = never, H = never, I = never, J = never, K = never>(ab: (_: Stream<In>) => B, bc: (_: B) => C, cd: (_: C) => D, df: (_: D) => F, fg: (_: F) => G, gh: (_: G) => H, hi: (_: H) => I, ij: (_: I) => J, jk: (_: J) => Effect.Effect<K, E, R>): Sink<K, In, never, E, Exclude<R, Scope.Scope>>G,
gh: (_: G) => Hgh: (_: G = never_: function (type parameter) G in <E, R, B = never, C = never, D = never, F = never, G = never, H = never, I = never, J = never, K = never>(ab: (_: Stream<In>) => B, bc: (_: B) => C, cd: (_: C) => D, df: (_: D) => F, fg: (_: F) => G, gh: (_: G) => H, hi: (_: H) => I, ij: (_: I) => J, jk: (_: J) => Effect.Effect<K, E, R>): Sink<K, In, never, E, Exclude<R, Scope.Scope>>G) => function (type parameter) H in <E, R, B = never, C = never, D = never, F = never, G = never, H = never, I = never, J = never, K = never>(ab: (_: Stream<In>) => B, bc: (_: B) => C, cd: (_: C) => D, df: (_: D) => F, fg: (_: F) => G, gh: (_: G) => H, hi: (_: H) => I, ij: (_: I) => J, jk: (_: J) => Effect.Effect<K, E, R>): Sink<K, In, never, E, Exclude<R, Scope.Scope>>H,
hi: (_: H) => Ihi: (_: H = never_: function (type parameter) H in <E, R, B = never, C = never, D = never, F = never, G = never, H = never, I = never, J = never, K = never>(ab: (_: Stream<In>) => B, bc: (_: B) => C, cd: (_: C) => D, df: (_: D) => F, fg: (_: F) => G, gh: (_: G) => H, hi: (_: H) => I, ij: (_: I) => J, jk: (_: J) => Effect.Effect<K, E, R>): Sink<K, In, never, E, Exclude<R, Scope.Scope>>H) => function (type parameter) I in <E, R, B = never, C = never, D = never, F = never, G = never, H = never, I = never, J = never, K = never>(ab: (_: Stream<In>) => B, bc: (_: B) => C, cd: (_: C) => D, df: (_: D) => F, fg: (_: F) => G, gh: (_: G) => H, hi: (_: H) => I, ij: (_: I) => J, jk: (_: J) => Effect.Effect<K, E, R>): Sink<K, In, never, E, Exclude<R, Scope.Scope>>I,
ij: (_: I) => Jij: (_: I = never_: function (type parameter) I in <E, R, B = never, C = never, D = never, F = never, G = never, H = never, I = never, J = never, K = never>(ab: (_: Stream<In>) => B, bc: (_: B) => C, cd: (_: C) => D, df: (_: D) => F, fg: (_: F) => G, gh: (_: G) => H, hi: (_: H) => I, ij: (_: I) => J, jk: (_: J) => Effect.Effect<K, E, R>): Sink<K, In, never, E, Exclude<R, Scope.Scope>>I) => function (type parameter) J in <E, R, B = never, C = never, D = never, F = never, G = never, H = never, I = never, J = never, K = never>(ab: (_: Stream<In>) => B, bc: (_: B) => C, cd: (_: C) => D, df: (_: D) => F, fg: (_: F) => G, gh: (_: G) => H, hi: (_: H) => I, ij: (_: I) => J, jk: (_: J) => Effect.Effect<K, E, R>): Sink<K, In, never, E, Exclude<R, Scope.Scope>>J,
jk: (_: J) => Effect.Effect<K, E, R>jk: (_: J = never_: function (type parameter) J in <E, R, B = never, C = never, D = never, F = never, G = never, H = never, I = never, J = never, K = never>(ab: (_: Stream<In>) => B, bc: (_: B) => C, cd: (_: C) => D, df: (_: D) => F, fg: (_: F) => G, gh: (_: G) => H, hi: (_: H) => I, ij: (_: I) => J, jk: (_: J) => Effect.Effect<K, E, R>): Sink<K, In, never, E, Exclude<R, Scope.Scope>>J) => import EffectEffect.type Effect.Effect = /*unresolved*/ anyEffect<function (type parameter) K in <E, R, B = never, C = never, D = never, F = never, G = never, H = never, I = never, J = never, K = never>(ab: (_: Stream<In>) => B, bc: (_: B) => C, cd: (_: C) => D, df: (_: D) => F, fg: (_: F) => G, gh: (_: G) => H, hi: (_: H) => I, ij: (_: I) => J, jk: (_: J) => Effect.Effect<K, E, R>): Sink<K, In, never, E, Exclude<R, Scope.Scope>>K, function (type parameter) E in <E, R, B = never, C = never, D = never, F = never, G = never, H = never, I = never, J = never, K = never>(ab: (_: Stream<In>) => B, bc: (_: B) => C, cd: (_: C) => D, df: (_: D) => F, fg: (_: F) => G, gh: (_: G) => H, hi: (_: H) => I, ij: (_: I) => J, jk: (_: J) => Effect.Effect<K, E, R>): Sink<K, In, never, E, Exclude<R, Scope.Scope>>E, function (type parameter) R in <E, R, B = never, C = never, D = never, F = never, G = never, H = never, I = never, J = never, K = never>(ab: (_: Stream<In>) => B, bc: (_: B) => C, cd: (_: C) => D, df: (_: D) => F, fg: (_: F) => G, gh: (_: G) => H, hi: (_: H) => I, ij: (_: I) => J, jk: (_: J) => Effect.Effect<K, E, R>): Sink<K, In, never, E, Exclude<R, Scope.Scope>>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<function (type parameter) K in <E, R, B = never, C = never, D = never, F = never, G = never, H = never, I = never, J = never, K = never>(ab: (_: Stream<In>) => B, bc: (_: B) => C, cd: (_: C) => D, df: (_: D) => F, fg: (_: F) => G, gh: (_: G) => H, hi: (_: H) => I, ij: (_: I) => J, jk: (_: J) => Effect.Effect<K, E, R>): Sink<K, In, never, E, Exclude<R, Scope.Scope>>K, function (type parameter) In in Constructor<In>In, never, function (type parameter) E in <E, R, B = never, C = never, D = never, F = never, G = never, H = never, I = never, J = never, K = never>(ab: (_: Stream<In>) => B, bc: (_: B) => C, cd: (_: C) => D, df: (_: D) => F, fg: (_: F) => G, gh: (_: G) => H, hi: (_: H) => I, ij: (_: I) => J, jk: (_: J) => Effect.Effect<K, E, R>): Sink<K, In, never, E, Exclude<R, Scope.Scope>>E, type Exclude<T, U> = T extends U
? never
: T
Exclude from T those types that are assignable to U
Exclude<function (type parameter) R in <E, R, B = never, C = never, D = never, F = never, G = never, H = never, I = never, J = never, K = never>(ab: (_: Stream<In>) => B, bc: (_: B) => C, cd: (_: C) => D, df: (_: D) => F, fg: (_: F) => G, gh: (_: G) => H, hi: (_: H) => I, ij: (_: I) => J, jk: (_: J) => Effect.Effect<K, E, R>): Sink<K, In, never, E, Exclude<R, Scope.Scope>>R, import ScopeScope.type Scope.Scope = /*unresolved*/ anyScope>>
<
function (type parameter) E in <E, R, B = never, C = never, D = never, F = never, G = never, H = never, I = never, J = never, K = never, L = never>(ab: (_: Stream<In>) => B, bc: (_: B) => C, cd: (_: C) => D, df: (_: D) => F, fg: (_: F) => G, gh: (_: G) => H, hi: (_: H) => I, ij: (_: I) => J, jk: (_: J) => K, kl: (_: K) => Effect.Effect<L, E, R>): Sink<L, In, never, E, Exclude<R, Scope.Scope>>E,
function (type parameter) R in <E, R, B = never, C = never, D = never, F = never, G = never, H = never, I = never, J = never, K = never, L = never>(ab: (_: Stream<In>) => B, bc: (_: B) => C, cd: (_: C) => D, df: (_: D) => F, fg: (_: F) => G, gh: (_: G) => H, hi: (_: H) => I, ij: (_: I) => J, jk: (_: J) => K, kl: (_: K) => Effect.Effect<L, E, R>): Sink<L, In, never, E, Exclude<R, Scope.Scope>>R,
function (type parameter) B in <E, R, B = never, C = never, D = never, F = never, G = never, H = never, I = never, J = never, K = never, L = never>(ab: (_: Stream<In>) => B, bc: (_: B) => C, cd: (_: C) => D, df: (_: D) => F, fg: (_: F) => G, gh: (_: G) => H, hi: (_: H) => I, ij: (_: I) => J, jk: (_: J) => K, kl: (_: K) => Effect.Effect<L, E, R>): Sink<L, In, never, E, Exclude<R, Scope.Scope>>B = never,
function (type parameter) C in <E, R, B = never, C = never, D = never, F = never, G = never, H = never, I = never, J = never, K = never, L = never>(ab: (_: Stream<In>) => B, bc: (_: B) => C, cd: (_: C) => D, df: (_: D) => F, fg: (_: F) => G, gh: (_: G) => H, hi: (_: H) => I, ij: (_: I) => J, jk: (_: J) => K, kl: (_: K) => Effect.Effect<L, E, R>): Sink<L, In, never, E, Exclude<R, Scope.Scope>>C = never,
function (type parameter) D in <E, R, B = never, C = never, D = never, F = never, G = never, H = never, I = never, J = never, K = never, L = never>(ab: (_: Stream<In>) => B, bc: (_: B) => C, cd: (_: C) => D, df: (_: D) => F, fg: (_: F) => G, gh: (_: G) => H, hi: (_: H) => I, ij: (_: I) => J, jk: (_: J) => K, kl: (_: K) => Effect.Effect<L, E, R>): Sink<L, In, never, E, Exclude<R, Scope.Scope>>D = never,
function (type parameter) F in <E, R, B = never, C = never, D = never, F = never, G = never, H = never, I = never, J = never, K = never, L = never>(ab: (_: Stream<In>) => B, bc: (_: B) => C, cd: (_: C) => D, df: (_: D) => F, fg: (_: F) => G, gh: (_: G) => H, hi: (_: H) => I, ij: (_: I) => J, jk: (_: J) => K, kl: (_: K) => Effect.Effect<L, E, R>): Sink<L, In, never, E, Exclude<R, Scope.Scope>>F = never,
function (type parameter) G in <E, R, B = never, C = never, D = never, F = never, G = never, H = never, I = never, J = never, K = never, L = never>(ab: (_: Stream<In>) => B, bc: (_: B) => C, cd: (_: C) => D, df: (_: D) => F, fg: (_: F) => G, gh: (_: G) => H, hi: (_: H) => I, ij: (_: I) => J, jk: (_: J) => K, kl: (_: K) => Effect.Effect<L, E, R>): Sink<L, In, never, E, Exclude<R, Scope.Scope>>G = never,
function (type parameter) H in <E, R, B = never, C = never, D = never, F = never, G = never, H = never, I = never, J = never, K = never, L = never>(ab: (_: Stream<In>) => B, bc: (_: B) => C, cd: (_: C) => D, df: (_: D) => F, fg: (_: F) => G, gh: (_: G) => H, hi: (_: H) => I, ij: (_: I) => J, jk: (_: J) => K, kl: (_: K) => Effect.Effect<L, E, R>): Sink<L, In, never, E, Exclude<R, Scope.Scope>>H = never,
function (type parameter) I in <E, R, B = never, C = never, D = never, F = never, G = never, H = never, I = never, J = never, K = never, L = never>(ab: (_: Stream<In>) => B, bc: (_: B) => C, cd: (_: C) => D, df: (_: D) => F, fg: (_: F) => G, gh: (_: G) => H, hi: (_: H) => I, ij: (_: I) => J, jk: (_: J) => K, kl: (_: K) => Effect.Effect<L, E, R>): Sink<L, In, never, E, Exclude<R, Scope.Scope>>I = never,
function (type parameter) J in <E, R, B = never, C = never, D = never, F = never, G = never, H = never, I = never, J = never, K = never, L = never>(ab: (_: Stream<In>) => B, bc: (_: B) => C, cd: (_: C) => D, df: (_: D) => F, fg: (_: F) => G, gh: (_: G) => H, hi: (_: H) => I, ij: (_: I) => J, jk: (_: J) => K, kl: (_: K) => Effect.Effect<L, E, R>): Sink<L, In, never, E, Exclude<R, Scope.Scope>>J = never,
function (type parameter) K in <E, R, B = never, C = never, D = never, F = never, G = never, H = never, I = never, J = never, K = never, L = never>(ab: (_: Stream<In>) => B, bc: (_: B) => C, cd: (_: C) => D, df: (_: D) => F, fg: (_: F) => G, gh: (_: G) => H, hi: (_: H) => I, ij: (_: I) => J, jk: (_: J) => K, kl: (_: K) => Effect.Effect<L, E, R>): Sink<L, In, never, E, Exclude<R, Scope.Scope>>K = never,
function (type parameter) L in <E, R, B = never, C = never, D = never, F = never, G = never, H = never, I = never, J = never, K = never, L = never>(ab: (_: Stream<In>) => B, bc: (_: B) => C, cd: (_: C) => D, df: (_: D) => F, fg: (_: F) => G, gh: (_: G) => H, hi: (_: H) => I, ij: (_: I) => J, jk: (_: J) => K, kl: (_: K) => Effect.Effect<L, E, R>): Sink<L, In, never, E, Exclude<R, Scope.Scope>>L = never
>(
ab: (_: Stream<In>) => Bab: (_: Stream<In>(parameter) _: {
channel: Channel.Channel<Arr.NonEmptyReadonlyArray<A>, E, void, unknown, unknown, unknown, R>;
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; <…;
}
_: interface Stream<out A, out E = never, out R = never>A Stream<A, E, R> describes a program that can emit many A values, fail
with E, and require R.
Details
Streams are pull-based with backpressure and emit chunks to amortize effect
evaluation. They support monadic composition and error handling similar to
Effect, adapted for multiple values.
Example (Creating and consuming streams)
import { Console, Effect, Stream } from "effect"
const program = Effect.gen(function*() {
yield* Stream.make(1, 2, 3).pipe(
Stream.map((n) => n * 2),
Stream.runForEach((n) => Console.log(n))
)
})
Effect.runPromise(program)
// Output:
// 2
// 4
// 6
Stream<function (type parameter) In in Constructor<In>In>) => function (type parameter) B in <E, R, B = never, C = never, D = never, F = never, G = never, H = never, I = never, J = never, K = never, L = never>(ab: (_: Stream<In>) => B, bc: (_: B) => C, cd: (_: C) => D, df: (_: D) => F, fg: (_: F) => G, gh: (_: G) => H, hi: (_: H) => I, ij: (_: I) => J, jk: (_: J) => K, kl: (_: K) => Effect.Effect<L, E, R>): Sink<L, In, never, E, Exclude<R, Scope.Scope>>B,
bc: (_: B) => Cbc: (_: B = never_: function (type parameter) B in <E, R, B = never, C = never, D = never, F = never, G = never, H = never, I = never, J = never, K = never, L = never>(ab: (_: Stream<In>) => B, bc: (_: B) => C, cd: (_: C) => D, df: (_: D) => F, fg: (_: F) => G, gh: (_: G) => H, hi: (_: H) => I, ij: (_: I) => J, jk: (_: J) => K, kl: (_: K) => Effect.Effect<L, E, R>): Sink<L, In, never, E, Exclude<R, Scope.Scope>>B) => function (type parameter) C in <E, R, B = never, C = never, D = never, F = never, G = never, H = never, I = never, J = never, K = never, L = never>(ab: (_: Stream<In>) => B, bc: (_: B) => C, cd: (_: C) => D, df: (_: D) => F, fg: (_: F) => G, gh: (_: G) => H, hi: (_: H) => I, ij: (_: I) => J, jk: (_: J) => K, kl: (_: K) => Effect.Effect<L, E, R>): Sink<L, In, never, E, Exclude<R, Scope.Scope>>C,
cd: (_: C) => Dcd: (_: C = never_: function (type parameter) C in <E, R, B = never, C = never, D = never, F = never, G = never, H = never, I = never, J = never, K = never, L = never>(ab: (_: Stream<In>) => B, bc: (_: B) => C, cd: (_: C) => D, df: (_: D) => F, fg: (_: F) => G, gh: (_: G) => H, hi: (_: H) => I, ij: (_: I) => J, jk: (_: J) => K, kl: (_: K) => Effect.Effect<L, E, R>): Sink<L, In, never, E, Exclude<R, Scope.Scope>>C) => function (type parameter) D in <E, R, B = never, C = never, D = never, F = never, G = never, H = never, I = never, J = never, K = never, L = never>(ab: (_: Stream<In>) => B, bc: (_: B) => C, cd: (_: C) => D, df: (_: D) => F, fg: (_: F) => G, gh: (_: G) => H, hi: (_: H) => I, ij: (_: I) => J, jk: (_: J) => K, kl: (_: K) => Effect.Effect<L, E, R>): Sink<L, In, never, E, Exclude<R, Scope.Scope>>D,
df: (_: D) => Fdf: (_: D = never_: function (type parameter) D in <E, R, B = never, C = never, D = never, F = never, G = never, H = never, I = never, J = never, K = never, L = never>(ab: (_: Stream<In>) => B, bc: (_: B) => C, cd: (_: C) => D, df: (_: D) => F, fg: (_: F) => G, gh: (_: G) => H, hi: (_: H) => I, ij: (_: I) => J, jk: (_: J) => K, kl: (_: K) => Effect.Effect<L, E, R>): Sink<L, In, never, E, Exclude<R, Scope.Scope>>D) => function (type parameter) F in <E, R, B = never, C = never, D = never, F = never, G = never, H = never, I = never, J = never, K = never, L = never>(ab: (_: Stream<In>) => B, bc: (_: B) => C, cd: (_: C) => D, df: (_: D) => F, fg: (_: F) => G, gh: (_: G) => H, hi: (_: H) => I, ij: (_: I) => J, jk: (_: J) => K, kl: (_: K) => Effect.Effect<L, E, R>): Sink<L, In, never, E, Exclude<R, Scope.Scope>>F,
fg: (_: F) => Gfg: (_: F = never_: function (type parameter) F in <E, R, B = never, C = never, D = never, F = never, G = never, H = never, I = never, J = never, K = never, L = never>(ab: (_: Stream<In>) => B, bc: (_: B) => C, cd: (_: C) => D, df: (_: D) => F, fg: (_: F) => G, gh: (_: G) => H, hi: (_: H) => I, ij: (_: I) => J, jk: (_: J) => K, kl: (_: K) => Effect.Effect<L, E, R>): Sink<L, In, never, E, Exclude<R, Scope.Scope>>F) => function (type parameter) G in <E, R, B = never, C = never, D = never, F = never, G = never, H = never, I = never, J = never, K = never, L = never>(ab: (_: Stream<In>) => B, bc: (_: B) => C, cd: (_: C) => D, df: (_: D) => F, fg: (_: F) => G, gh: (_: G) => H, hi: (_: H) => I, ij: (_: I) => J, jk: (_: J) => K, kl: (_: K) => Effect.Effect<L, E, R>): Sink<L, In, never, E, Exclude<R, Scope.Scope>>G,
gh: (_: G) => Hgh: (_: G = never_: function (type parameter) G in <E, R, B = never, C = never, D = never, F = never, G = never, H = never, I = never, J = never, K = never, L = never>(ab: (_: Stream<In>) => B, bc: (_: B) => C, cd: (_: C) => D, df: (_: D) => F, fg: (_: F) => G, gh: (_: G) => H, hi: (_: H) => I, ij: (_: I) => J, jk: (_: J) => K, kl: (_: K) => Effect.Effect<L, E, R>): Sink<L, In, never, E, Exclude<R, Scope.Scope>>G) => function (type parameter) H in <E, R, B = never, C = never, D = never, F = never, G = never, H = never, I = never, J = never, K = never, L = never>(ab: (_: Stream<In>) => B, bc: (_: B) => C, cd: (_: C) => D, df: (_: D) => F, fg: (_: F) => G, gh: (_: G) => H, hi: (_: H) => I, ij: (_: I) => J, jk: (_: J) => K, kl: (_: K) => Effect.Effect<L, E, R>): Sink<L, In, never, E, Exclude<R, Scope.Scope>>H,
hi: (_: H) => Ihi: (_: H = never_: function (type parameter) H in <E, R, B = never, C = never, D = never, F = never, G = never, H = never, I = never, J = never, K = never, L = never>(ab: (_: Stream<In>) => B, bc: (_: B) => C, cd: (_: C) => D, df: (_: D) => F, fg: (_: F) => G, gh: (_: G) => H, hi: (_: H) => I, ij: (_: I) => J, jk: (_: J) => K, kl: (_: K) => Effect.Effect<L, E, R>): Sink<L, In, never, E, Exclude<R, Scope.Scope>>H) => function (type parameter) I in <E, R, B = never, C = never, D = never, F = never, G = never, H = never, I = never, J = never, K = never, L = never>(ab: (_: Stream<In>) => B, bc: (_: B) => C, cd: (_: C) => D, df: (_: D) => F, fg: (_: F) => G, gh: (_: G) => H, hi: (_: H) => I, ij: (_: I) => J, jk: (_: J) => K, kl: (_: K) => Effect.Effect<L, E, R>): Sink<L, In, never, E, Exclude<R, Scope.Scope>>I,
ij: (_: I) => Jij: (_: I = never_: function (type parameter) I in <E, R, B = never, C = never, D = never, F = never, G = never, H = never, I = never, J = never, K = never, L = never>(ab: (_: Stream<In>) => B, bc: (_: B) => C, cd: (_: C) => D, df: (_: D) => F, fg: (_: F) => G, gh: (_: G) => H, hi: (_: H) => I, ij: (_: I) => J, jk: (_: J) => K, kl: (_: K) => Effect.Effect<L, E, R>): Sink<L, In, never, E, Exclude<R, Scope.Scope>>I) => function (type parameter) J in <E, R, B = never, C = never, D = never, F = never, G = never, H = never, I = never, J = never, K = never, L = never>(ab: (_: Stream<In>) => B, bc: (_: B) => C, cd: (_: C) => D, df: (_: D) => F, fg: (_: F) => G, gh: (_: G) => H, hi: (_: H) => I, ij: (_: I) => J, jk: (_: J) => K, kl: (_: K) => Effect.Effect<L, E, R>): Sink<L, In, never, E, Exclude<R, Scope.Scope>>J,
jk: (_: J) => Kjk: (_: J = never_: function (type parameter) J in <E, R, B = never, C = never, D = never, F = never, G = never, H = never, I = never, J = never, K = never, L = never>(ab: (_: Stream<In>) => B, bc: (_: B) => C, cd: (_: C) => D, df: (_: D) => F, fg: (_: F) => G, gh: (_: G) => H, hi: (_: H) => I, ij: (_: I) => J, jk: (_: J) => K, kl: (_: K) => Effect.Effect<L, E, R>): Sink<L, In, never, E, Exclude<R, Scope.Scope>>J) => function (type parameter) K in <E, R, B = never, C = never, D = never, F = never, G = never, H = never, I = never, J = never, K = never, L = never>(ab: (_: Stream<In>) => B, bc: (_: B) => C, cd: (_: C) => D, df: (_: D) => F, fg: (_: F) => G, gh: (_: G) => H, hi: (_: H) => I, ij: (_: I) => J, jk: (_: J) => K, kl: (_: K) => Effect.Effect<L, E, R>): Sink<L, In, never, E, Exclude<R, Scope.Scope>>K,
kl: (_: K) => Effect.Effect<L, E, R>kl: (_: K = never_: function (type parameter) K in <E, R, B = never, C = never, D = never, F = never, G = never, H = never, I = never, J = never, K = never, L = never>(ab: (_: Stream<In>) => B, bc: (_: B) => C, cd: (_: C) => D, df: (_: D) => F, fg: (_: F) => G, gh: (_: G) => H, hi: (_: H) => I, ij: (_: I) => J, jk: (_: J) => K, kl: (_: K) => Effect.Effect<L, E, R>): Sink<L, In, never, E, Exclude<R, Scope.Scope>>K) => import EffectEffect.type Effect.Effect = /*unresolved*/ anyEffect<function (type parameter) L in <E, R, B = never, C = never, D = never, F = never, G = never, H = never, I = never, J = never, K = never, L = never>(ab: (_: Stream<In>) => B, bc: (_: B) => C, cd: (_: C) => D, df: (_: D) => F, fg: (_: F) => G, gh: (_: G) => H, hi: (_: H) => I, ij: (_: I) => J, jk: (_: J) => K, kl: (_: K) => Effect.Effect<L, E, R>): Sink<L, In, never, E, Exclude<R, Scope.Scope>>L, function (type parameter) E in <E, R, B = never, C = never, D = never, F = never, G = never, H = never, I = never, J = never, K = never, L = never>(ab: (_: Stream<In>) => B, bc: (_: B) => C, cd: (_: C) => D, df: (_: D) => F, fg: (_: F) => G, gh: (_: G) => H, hi: (_: H) => I, ij: (_: I) => J, jk: (_: J) => K, kl: (_: K) => Effect.Effect<L, E, R>): Sink<L, In, never, E, Exclude<R, Scope.Scope>>E, function (type parameter) R in <E, R, B = never, C = never, D = never, F = never, G = never, H = never, I = never, J = never, K = never, L = never>(ab: (_: Stream<In>) => B, bc: (_: B) => C, cd: (_: C) => D, df: (_: D) => F, fg: (_: F) => G, gh: (_: G) => H, hi: (_: H) => I, ij: (_: I) => J, jk: (_: J) => K, kl: (_: K) => Effect.Effect<L, E, R>): Sink<L, In, never, E, Exclude<R, Scope.Scope>>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<function (type parameter) L in <E, R, B = never, C = never, D = never, F = never, G = never, H = never, I = never, J = never, K = never, L = never>(ab: (_: Stream<In>) => B, bc: (_: B) => C, cd: (_: C) => D, df: (_: D) => F, fg: (_: F) => G, gh: (_: G) => H, hi: (_: H) => I, ij: (_: I) => J, jk: (_: J) => K, kl: (_: K) => Effect.Effect<L, E, R>): Sink<L, In, never, E, Exclude<R, Scope.Scope>>L, function (type parameter) In in Constructor<In>In, never, function (type parameter) E in <E, R, B = never, C = never, D = never, F = never, G = never, H = never, I = never, J = never, K = never, L = never>(ab: (_: Stream<In>) => B, bc: (_: B) => C, cd: (_: C) => D, df: (_: D) => F, fg: (_: F) => G, gh: (_: G) => H, hi: (_: H) => I, ij: (_: I) => J, jk: (_: J) => K, kl: (_: K) => Effect.Effect<L, E, R>): Sink<L, In, never, E, Exclude<R, Scope.Scope>>E, type Exclude<T, U> = T extends U
? never
: T
Exclude from T those types that are assignable to U
Exclude<function (type parameter) R in <E, R, B = never, C = never, D = never, F = never, G = never, H = never, I = never, J = never, K = never, L = never>(ab: (_: Stream<In>) => B, bc: (_: B) => C, cd: (_: C) => D, df: (_: D) => F, fg: (_: F) => G, gh: (_: G) => H, hi: (_: H) => I, ij: (_: I) => J, jk: (_: J) => K, kl: (_: K) => Effect.Effect<L, E, R>): Sink<L, In, never, E, Exclude<R, Scope.Scope>>R, import ScopeScope.type Scope.Scope = /*unresolved*/ anyScope>>
}
}