Hyperlinkv0.8.0-beta.28

SynchronizedRef

SynchronizedRef.getAndUpdateSomeconsteffect/SynchronizedRef.ts:223
<A>(pf: (a: A) => Option.Option<A>): (
  self: SynchronizedRef<A>
) => Effect.Effect<A>
<A>(
  self: SynchronizedRef<A>,
  pf: (a: A) => Option.Option<A>
): Effect.Effect<A>

Applies a partial update atomically and returns the previous value. If the function returns Option.some, the ref is updated; if it returns Option.none, the ref is left unchanged.

When to use

Use to return the previous SynchronizedRef value while applying a pure conditional update.

export const getAndUpdateSome: {
  <A>(pf: (a: A) => Option.Option<A>): (self: SynchronizedRef<A>) => Effect.Effect<A>
  <A>(self: SynchronizedRef<A>, pf: (a: A) => Option.Option<A>): Effect.Effect<A>
} = dual(
  2,
  <A>(self: SynchronizedRef<A>, pf: (a: A) => Option.Option<A>): Effect.Effect<A> =>
    self.semaphore.withPermit(Ref.getAndUpdateSome(self, pf))
)