Hyperlinkv0.8.0-beta.28

TxSubscriptionRef

TxSubscriptionRef.getAndSetconsteffect/TxSubscriptionRef.ts:313
<A>(value: A): (self: TxSubscriptionRef<A>) => Effect.Effect<A>
<A>(self: TxSubscriptionRef<A>, value: A): Effect.Effect<A>

Gets the current value and sets a new value atomically. Publishes the new value to all subscribers.

When to use

Use to replace a TxSubscriptionRef value while returning the previous value and publishing the update to subscribers.

Example (Getting and setting atomically)

import { Effect, TxSubscriptionRef } from "effect"

const program = Effect.gen(function*() {
  const ref = yield* TxSubscriptionRef.make("a")
  const old = yield* TxSubscriptionRef.getAndSet(ref, "b")
  console.log(old) // "a"
  console.log(yield* TxSubscriptionRef.get(ref)) // "b"
})
export const getAndSet: {
  <A>(value: A): (self: TxSubscriptionRef<A>) => Effect.Effect<A>
  <A>(self: TxSubscriptionRef<A>, value: A): Effect.Effect<A>
} = dual(
  2,
  <A>(self: TxSubscriptionRef<A>, value: A): Effect.Effect<A> => modify(self, (current) => [current, value])
)