Hyperlinkv0.8.0-beta.28

Ref

Ref.updateconsteffect/Ref.ts:612
<A>(f: (a: A) => A): (self: Ref<A>) => Effect.Effect<void>
<A>(self: Ref<A>, f: (a: A) => A): Effect.Effect<void>

Updates the value of the Ref atomically using the given function.

When to use

Use to apply a Ref state transition without returning a value.

Example (Updating a value)

import { Effect, Ref } from "effect"

const program = Effect.gen(function*() {
  const counter = yield* Ref.make(5)

  // Update the value
  yield* Ref.update(counter, (n) => n * 2)

  const value = yield* Ref.get(counter)
  console.log(value) // 10
})

// Using multiple operations
const program2 = Effect.gen(function*() {
  const counter = yield* Ref.make(5)
  yield* Ref.update(counter, (n: number) => n + 10)
  const value = yield* Ref.get(counter)
  console.log(value) // 15
})
Source effect/Ref.ts:6127 lines
export const update = dual<
  <A>(f: (a: A) => A) => (self: Ref<A>) => Effect.Effect<void>,
  <A>(self: Ref<A>, f: (a: A) => A) => Effect.Effect<void>
>(2, <A>(self: Ref<A>, f: (a: A) => A) =>
  Effect.sync(() => {
    self.ref.current = f(self.ref.current)
  }))
Referenced by 6 symbols