Hyperlinkv0.8.0-beta.28

SynchronizedRef

SynchronizedRef.modifySomeconsteffect/SynchronizedRef.ts:336
<B, A>(pf: (a: A) => readonly [B, Option.Option<A>]): (
  self: SynchronizedRef<A>
) => Effect.Effect<B>
<A, B>(
  self: SynchronizedRef<A>,
  pf: (a: A) => readonly [B, Option.Option<A>]
): Effect.Effect<B>

Computes a return value and an optional new ref value atomically. Option.some updates the ref; Option.none leaves it unchanged.

When to use

Use to compute a return value while optionally updating a SynchronizedRef under its semaphore.

export const modifySome: {
  <B, A>(
    pf: (a: A) => readonly [B, Option.Option<A>]
  ): (self: SynchronizedRef<A>) => Effect.Effect<B>
  <A, B>(
    self: SynchronizedRef<A>,
    pf: (a: A) => readonly [B, Option.Option<A>]
  ): Effect.Effect<B>
} = dual(
  2,
  <A, B>(
    self: SynchronizedRef<A>,
    pf: (a: A) => readonly [B, Option.Option<A>]
  ): Effect.Effect<B> => self.semaphore.withPermit(Ref.modifySome(self.backing, pf))
)