import type * as Cause from "../../Cause.js" import * as Chunk from "../../Chunk.js" import * as Effect from "../../Effect.js" import * as Option from "../../Option.js" import * as Queue from "../../Queue.js" import type * as Take from "../../Take.js" import * as take from "../take.js" /** @internal */ export interface Pull extends Effect.Effect, Option.Option, R> {} /** @internal */ export const emit = (value: A): Effect.Effect> => Effect.succeed(Chunk.of(value)) /** @internal */ export const emitChunk = (chunk: Chunk.Chunk): Effect.Effect> => Effect.succeed(chunk) /** @internal */ export const empty = (): Effect.Effect> => Effect.succeed(Chunk.empty()) /** @internal */ export const end = (): Effect.Effect> => Effect.fail(Option.none()) /** @internal */ export const fail = (error: E): Effect.Effect> => Effect.fail(Option.some(error)) /** @internal */ export const failCause = (cause: Cause.Cause): Effect.Effect> => Effect.mapError(Effect.failCause(cause), Option.some) /** @internal */ export const fromDequeue = ( dequeue: Queue.Dequeue> ): Effect.Effect, Option.Option> => Effect.flatMap(Queue.take(dequeue), take.done)