Hyperlinkv0.8.0-beta.28

Ref

Ref.getAndSetconsteffect/Ref.ts:283
<A>(value: A): (self: Ref<A>) => Effect.Effect<A>
<A>(self: Ref<A>, value: A): Effect.Effect<A>

Gets the current value of the Ref, sets it to the specified value, and returns the previous value atomically.

When to use

Use to replace a plain Ref value while returning the previous value.

Example (Replacing a value atomically)

import { Effect, Ref } from "effect"

const program = Effect.gen(function*() {
  const ref = yield* Ref.make("initial")

  // Get current value and set new value atomically
  const previous = yield* Ref.getAndSet(ref, "updated")
  console.log(previous) // "initial"

  const current = yield* Ref.get(ref)
  console.log(current) // "updated"
})
Source effect/Ref.ts:2839 lines
export const getAndSet = dual<
  <A>(value: A) => (self: Ref<A>) => Effect.Effect<A>,
  <A>(self: Ref<A>, value: A) => Effect.Effect<A>
>(2, <A>(self: Ref<A>, value: A) =>
  Effect.sync(() => {
    const current = self.ref.current
    self.ref.current = value
    return current
  }))
Referenced by 1 symbols