Skip to content

Latest commit

 

History

History
109 lines (81 loc) · 2.88 KB

File metadata and controls

109 lines (81 loc) · 2.88 KB

FiberRef: FiberRefServiceMap.Reference

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.

Built-in References

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

Reading References

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)
})

Scoped Updates (Effect.locallyEffect.provideService)

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"
)

Writing References

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
)