In v4, FiberRef, FiberRefs, FiberRefsPatch, and Differ have been removed.
Fiber-local state is now handled by ServiceMap.Reference — the same mechanism
used for services with default values.
v3's built-in FiberRef values are now ServiceMap.Reference values exported
from References and related modules.
| v3 FiberRef | v4 Reference |
|---|---|
FiberRef.currentConcurrency |
References.CurrentConcurrency |
FiberRef.currentLogLevel |
References.CurrentLogLevel |
FiberRef.currentMinimumLogLevel |
References.MinimumLogLevel |
FiberRef.currentLogAnnotations |
References.CurrentLogAnnotations |
FiberRef.currentLogSpan |
References.CurrentLogSpans |
FiberRef.currentScheduler |
References.Scheduler |
FiberRef.currentMaxOpsBeforeYield |
References.MaxOpsBeforeYield |
FiberRef.currentTracerEnabled |
References.TracerEnabled |
FiberRef.unhandledErrorLogLevel |
References.UnhandledLogLevel |
In v3, FiberRef.get retrieved the current value. In v4, references are
services — yield* them directly.
v3
import { Effect, FiberRef } from "effect"
const program = Effect.gen(function*() {
const level = yield* FiberRef.get(FiberRef.currentLogLevel)
console.log(level)
})v4
import { Effect, References } from "effect"
const program = Effect.gen(function*() {
const level = yield* References.CurrentLogLevel
console.log(level) // "Info" (default)
})v3's Effect.locally set a FiberRef value for the duration of an effect. In
v4, use Effect.provideService with the reference.
v3
import { Effect, FiberRef, LogLevel } from "effect"
const program = Effect.locally(
myEffect,
FiberRef.currentLogLevel,
LogLevel.Debug
)v4
import { Effect, References } from "effect"
const program = Effect.provideService(
myEffect,
References.CurrentLogLevel,
"Debug"
)v3's FiberRef.set mutated the current fiber's ref value. In v4, references are
set via Effect.provideService, which scopes the value to the provided effect.
v3
import { Effect, FiberRef } from "effect"
const program = Effect.gen(function*() {
yield* FiberRef.set(FiberRef.currentConcurrency, 10)
// subsequent code sees concurrency = 10
})v4
import { Effect, References } from "effect"
const program = Effect.provideService(
Effect.gen(function*() {
const concurrency = yield* References.CurrentConcurrency
console.log(concurrency) // 10
}),
References.CurrentConcurrency,
10
)