Skip to content
Effect Days 2026 Get your ticket

SingleProducerAsyncInput

4 exports Added in v2.0.0 Source

Constructors

make

Added in v2.0.0 Source

Signature

declare const make: <Err, Elem, Done>() => Effect.Effect<SingleProducerAsyncInput<Err, Elem, Done>>

Models

AsyncInputConsumer interface

Added in v2.0.0 Source

Consumer-side view of SingleProducerAsyncInput for variance purposes.

Signature

interface AsyncInputConsumer<out Err, out Elem, out Done> {
takeWith<A>(onError: (cause: Cause<Err>) => A, onElement: (element: Elem) => A, onDone: (value: Done) => A): Effect<A>;
}

AsyncInputProducer interface

Added in v2.0.0 Source

Producer-side view of SingleProducerAsyncInput for variance purposes.

Signature

interface AsyncInputProducer<in Err, in Elem, in Done> {
awaitRead(): Effect<unknown>;
done(value: Done): Effect<unknown>;
emit(element: Elem): Effect<unknown>;
error(cause: Cause<Err>): Effect<unknown>;
}

SingleProducerAsyncInput interface

Added in v2.0.0 Source

An MVar-like abstraction for sending data to channels asynchronously which is designed for one producer and multiple consumers.

Features the following semantics:

  • Buffer of size 1.
  • When emitting, the producer waits for a consumer to pick up the value to prevent "reading ahead" too much.
  • Once an emitted element is read by a consumer, it is cleared from the buffer, so that at most one consumer sees every emitted element.
  • When sending a done or error signal, the producer does not wait for a consumer to pick up the signal. The signal stays in the buffer after being read by a consumer, so it can be propagated to multiple consumers.
  • Trying to publish another emit/error/done after an error/done have already been published results in an interruption.

Signature

interface SingleProducerAsyncInput<in out Err, in out Elem, in out Done> extends AsyncInputProducer<Err, Elem, Done>, AsyncInputConsumer<Err, Elem, Done> {
readonly close: Effect<unknown>;
readonly take: Effect<Exit<Elem, Either<Done, Err>>>;
}