Hyperlinkv0.8.0-beta.28

SubscriptionRef

SubscriptionRef.updateSomeconsteffect/SubscriptionRef.ts:857
<A>(update: (a: A) => Option.Option<A>): (
  self: SubscriptionRef<A>
) => Effect.Effect<void>
<A>(
  self: SubscriptionRef<A>,
  update: (a: A) => Option.Option<A>
): Effect.Effect<void>

Applies an update function to the current value. If it returns Option.some, sets and publishes that value; if it returns Option.none, leaves the reference unchanged and does not publish.

Example (Conditionally updating a value)

import { Effect, Option, SubscriptionRef } from "effect"

const program = Effect.gen(function*() {
  const ref = yield* SubscriptionRef.make(10)

  yield* SubscriptionRef.updateSome(
    ref,
    (n) => n > 5 ? Option.some(n * 2) : Option.none()
  )

  const value = yield* SubscriptionRef.get(ref)
  console.log(value)
})
updating
export const updateSome: {
  <A>(update: (a: A) => Option.Option<A>): (self: SubscriptionRef<A>) => Effect.Effect<void>
  <A>(self: SubscriptionRef<A>, update: (a: A) => Option.Option<A>): Effect.Effect<void>
} = dual(2, <A>(
  self: SubscriptionRef<A>,
  update: (a: A) => Option.Option<A>
) =>
  self.semaphore.withPermit(Effect.sync(() => {
    const option = update(self.value)
    if (Option.isNone(option)) return
    setUnsafe(self, option.value)
  })))