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
// ----------------------------------------------------------------------------