>>,
- options?: forkEffectDequeue.Options,
-): Effect.Effect<
- Queue.Dequeue>,
- never,
- forkEffectDequeue.OutputContext
-> => Effect.all([
- Ref.make>(initial()),
- Queue.unbounded>(),
-]).pipe(
- Effect.tap(([ref, queue]) => Effect.forkScoped(State().pipe(
- Effect.andThen(state => state.set(running(options?.initialProgress)).pipe(
- Effect.andThen(effect),
- Effect.onExit(exit => Effect.andThen(
- state.set(fromExit(exit)),
- Effect.forkScoped(Queue.shutdown(queue)),
- )),
- )),
- Effect.provide(Layer.empty.pipe(
- Layer.provideMerge(makeProgressLayer()),
- Layer.provideMerge(Layer.succeed(State(), {
- get: ref,
- set: v => Effect.andThen(Ref.set(ref, v), Queue.offer(queue, v))
- })),
- )),
- ))),
- Effect.map(([, queue]) => queue),
-) as Effect.Effect>, never, Scope.Scope>