diff --git a/packages/effect/src/Micro.ts b/packages/effect/src/Micro.ts index 125bc32f088..18db9da8ec4 100644 --- a/packages/effect/src/Micro.ts +++ b/packages/effect/src/Micro.ts @@ -363,12 +363,13 @@ const EnvRefProto = { * @since 3.3.0 * @category environment refs */ -export const envRefMake = (key: string, initial: A): EnvRef => { - const self = Object.create(EnvRefProto) - self.key = key - self.initial = initial - return self -} +export const envRefMake = (key: string, initial: LazyArg): EnvRef => + globalValue(key, () => { + const self = Object.create(EnvRefProto) + self.key = key + self.initial = initial + return self + }) /** * @since 3.3.0 @@ -376,7 +377,7 @@ export const envRefMake = (key: string, initial: A): EnvRef => { */ export const currentAbortController: EnvRef = envRefMake( "effect/Micro/currentAbortController", - new AbortController() + () => new AbortController() ) /** @@ -385,7 +386,7 @@ export const currentAbortController: EnvRef = envRefMake( */ export const currentAbortSignal: EnvRef = envRefMake( "effect/Micro/currentAbortSignal", - currentAbortController.initial.signal + () => currentAbortController.initial.signal ) /** @@ -394,7 +395,7 @@ export const currentAbortSignal: EnvRef = envRefMake( */ export const currentContext: EnvRef> = envRefMake( "effect/Micro/currentContext", - Context.empty() + () => Context.empty() ) /** @@ -403,7 +404,25 @@ export const currentContext: EnvRef> = envRefMake( */ export const currentConcurrency: EnvRef<"unbounded" | number> = envRefMake( "effect/Micro/currentConcurrency", - "unbounded" + () => "unbounded" +) + +const currentInterruptible: EnvRef = envRefMake( + "effect/Micro/currentInterruptible", + () => true +) + +/** + * @since 3.3.0 + * @category env refs + */ +export const withConcurrency: { + (concurrency: "unbounded" | number): (self: Micro) => Micro + (self: Micro, concurrency: "unbounded" | number): Micro +} = dual( + 2, + (self: Micro, concurrency: "unbounded" | number): Micro => + locally(self, currentConcurrency, concurrency) ) // ---------------------------------------------------------------------------- @@ -2643,28 +2662,6 @@ export const runSync = (effect: Micro): A => { return result.right } -// ======================================================================== -// env refs -// ======================================================================== - -const currentInterruptible: EnvRef = envRefMake( - "effect/Micro/currentInterruptible", - true -) - -/** - * @since 3.3.0 - * @category env refs - */ -export const withConcurrency: { - (concurrency: "unbounded" | number): (self: Micro) => Micro - (self: Micro, concurrency: "unbounded" | number): Micro -} = dual( - 2, - (self: Micro, concurrency: "unbounded" | number): Micro => - locally(self, currentConcurrency, concurrency) -) - // ---------------------------------------------------------------------------- // Errors // ----------------------------------------------------------------------------