Hyperlinkv0.8.0-beta.28

SynchronizedRef

SynchronizedRef.getAndSetconsteffect/SynchronizedRef.ts:140
<A>(value: A): (self: SynchronizedRef<A>) => Effect.Effect<A>
<A>(self: SynchronizedRef<A>, value: A): Effect.Effect<A>

Sets a new value atomically and returns the previous value, serialized by the ref's semaphore.

When to use

Use to replace a SynchronizedRef with a known value when the previous value is also needed.

export const getAndSet: {
  <A>(value: A): (self: SynchronizedRef<A>) => Effect.Effect<A>
  <A>(self: SynchronizedRef<A>, value: A): Effect.Effect<A>
} = dual(
  2,
  <A>(self: SynchronizedRef<A>, value: A): Effect.Effect<A> =>
    self.semaphore.withPermit(Ref.getAndSet(self.backing, value))
)