<A, E>(self: TxEnqueue<A, E | Cause.Done>): Effect.Effect<boolean>Ends a queue by signaling completion with a Cause.Done error.
Details
This is a convenience wrapper around failCause for queues whose error channel can contain Cause.Done. If buffered items remain, the queue enters the closing state and those items may still be consumed before later take or peek operations fail with Cause.Done.
Example (Ending queues)
import { Cause, Effect, TxQueue } from "effect"
const program = Effect.gen(function*() {
const queue = yield* TxQueue.bounded<number, Cause.Done>(10)
// Signal the end of the queue
const result = yield* TxQueue.end(queue)
console.log(result) // true
// All operations will now fail with Done
const takeResult = yield* Effect.flip(TxQueue.take(queue))
console.log(Cause.isDone(takeResult)) // true
const peekResult = yield* Effect.flip(TxQueue.peek(queue))
console.log(Cause.isDone(peekResult)) // true
})export const const end: <A, E>(
self: TxEnqueue<A, E | Cause.Done>
) => Effect.Effect<boolean>
Ends a queue by signaling completion with a Cause.Done error.
Details
This is a convenience wrapper around failCause for queues whose error channel can contain Cause.Done. If buffered items remain, the queue enters the closing state and those items may still be consumed before later take or peek operations fail with Cause.Done.
Example (Ending queues)
import { Cause, Effect, TxQueue } from "effect"
const program = Effect.gen(function*() {
const queue = yield* TxQueue.bounded<number, Cause.Done>(10)
// Signal the end of the queue
const result = yield* TxQueue.end(queue)
console.log(result) // true
// All operations will now fail with Done
const takeResult = yield* Effect.flip(TxQueue.take(queue))
console.log(Cause.isDone(takeResult)) // true
const peekResult = yield* Effect.flip(TxQueue.peek(queue))
console.log(Cause.isDone(peekResult)) // true
})
end = <function (type parameter) A in <A, E>(self: TxEnqueue<A, E | Cause.Done>): Effect.Effect<boolean>A, function (type parameter) E in <A, E>(self: TxEnqueue<A, E | Cause.Done>): Effect.Effect<boolean>E>(self: TxEnqueue<A, E | Cause.Done>(parameter) self: {
strategy: "bounded" | "unbounded" | "dropping" | "sliding";
capacity: number;
items: TxChunk.TxChunk<any>;
stateRef: TxRef.TxRef<State<any, any>>;
toString: () => string;
toJSON: () => unknown;
}
self: interface TxEnqueue<in A, in E = never>Namespace containing type definitions for TxEnqueue variance annotations.
A TxEnqueue represents the write-only interface of a transactional queue, providing
operations for adding elements (enqueue operations) and inspecting queue state.
Example (Offering values through enqueue handles)
import { Effect, TxQueue } from "effect"
import type { Cause } from "effect"
const program = Effect.gen(function*() {
// Queue without error channel
const queue = yield* TxQueue.bounded<number>(10)
const accepted = yield* TxQueue.offer(queue, 42)
// Queue with error channel for completion signaling
const faultTolerantQueue = yield* TxQueue.bounded<number, string>(10)
yield* TxQueue.offerAll(faultTolerantQueue, [1, 2, 3])
yield* TxQueue.fail(faultTolerantQueue, "processing complete")
// Works with Done for clean completion
const completableQueue = yield* TxQueue.bounded<
string,
Cause.Done
>(5)
yield* TxQueue.offer(completableQueue, "task")
yield* TxQueue.end(completableQueue)
})
TxEnqueue<function (type parameter) A in <A, E>(self: TxEnqueue<A, E | Cause.Done>): Effect.Effect<boolean>A, function (type parameter) E in <A, E>(self: TxEnqueue<A, E | Cause.Done>): Effect.Effect<boolean>E | import CauseCause.type Cause.Done = /*unresolved*/ anyDone>): import EffectEffect.type Effect.Effect = /*unresolved*/ anyEffect<boolean> =>
const failCause: {
<E>(cause: Cause.Cause<E>): <A>(
self: TxEnqueue<A, E>
) => Effect.Effect<boolean>
<A, E>(
self: TxEnqueue<A, E>,
cause: Cause.Cause<E>
): Effect.Effect<boolean>
}
failCause(self: TxEnqueue<A, E | Cause.Done>(parameter) self: {
strategy: "bounded" | "unbounded" | "dropping" | "sliding";
capacity: number;
items: TxChunk.TxChunk<any>;
stateRef: TxRef.TxRef<State<any, any>>;
toString: () => string;
toJSON: () => unknown;
}
self, import CauseCause.fail(import CauseCause.Done()))