SignallingRef

abstract
class SignallingRef[F[_], A] extends Ref[F, A] with Signal[F, A]

Pure holder of a single value of type A that can be both read and updated in the effect F.

The update methods have the same semantics as Ref, as well as propagating changes to discrete (with a last-update-wins policy in case of very fast updates).

The access method differs slightly from Ref in that the update function, in the presence of discrete, can return false and need looping even without any other writers.

Companion
object
trait Signal[F, A]
class Ref[F, A]
trait RefSink[F, A]
trait RefSource[F, A]
class Object
trait Matchable
class Any

Value members

Inherited methods

def access: F[(A, A => F[Boolean])]

Obtains a snapshot of the current value, and a setter for updating it. The setter may noop (in which case false is returned) if another concurrent call to access uses its setter first.

Obtains a snapshot of the current value, and a setter for updating it. The setter may noop (in which case false is returned) if another concurrent call to access uses its setter first.

Once it has noop'd or been used once, a setter never succeeds again.

Satisfies: r.access.map(_._1) == r.get r.access.flatMap { case (v, setter) => setter(f(v)) } == r.tryUpdate(f).map(_.isDefined)

Inherited from
Ref
def continuous: Stream[F, A]

Returns a stream of the current value of the signal. An element is always available -- on each pull, the current value is supplied.

Returns a stream of the current value of the signal. An element is always available -- on each pull, the current value is supplied.

Inherited from
Signal
def discrete: Stream[F, A]

Returns a stream of the updates to this signal.

Returns a stream of the updates to this signal.

Updates that are very close together may result in only the last update appearing in the stream. If you want to be notified about every single update, use a Queue or Channel instead.

Inherited from
Signal
def get: F[A]

Asynchronously gets the current value of this Signal.

Asynchronously gets the current value of this Signal.

Inherited from
Signal
def getAndSet(a: A): F[A]

Replaces the current value with a, returning the previous value.

Replaces the current value with a, returning the previous value.

Inherited from
Ref
def getAndUpdate(f: A => A): F[A]

Updates the current value using f and returns the previous value.

Updates the current value using f and returns the previous value.

In case of retries caused by concurrent modifications, the returned value will be the last one before a successful update.

Inherited from
Ref
def mapK[G[_]](f: FunctionK[F, G])(implicit F: Functor[F]): Ref[G, A]

Modify the context F using transformation f.

Modify the context F using transformation f.

Inherited from
Ref
def modify[B](f: A => (A, B)): F[B]

Like tryModify but does not complete until the update has been successfully made.

Like tryModify but does not complete until the update has been successfully made.

Inherited from
Ref
def modifyState[B](state: State[A, B]): F[B]

Like tryModifyState but retries the modification until successful.

Like tryModifyState but retries the modification until successful.

Inherited from
Ref
def set(a: A): F[Unit]

Sets the current value to a.

Sets the current value to a.

The returned action completes after the reference has been successfully set.

Satisfies: r.set(fa) *> r.get == fa

Inherited from
RefSink
def tryModify[B](f: A => (A, B)): F[Option[B]]

Like tryUpdate but allows the update function to return an output value of type B. The returned action completes with None if the value is not updated successfully and Some(b) otherwise.

Like tryUpdate but allows the update function to return an output value of type B. The returned action completes with None if the value is not updated successfully and Some(b) otherwise.

Inherited from
Ref
def tryModifyState[B](state: State[A, B]): F[Option[B]]

Update the value of this ref with a state computation.

Update the value of this ref with a state computation.

The current value of this ref is used as the initial state and the computed output state is stored in this ref after computation completes. If a concurrent modification occurs, None is returned.

Inherited from
Ref
def tryUpdate(f: A => A): F[Boolean]

Attempts to modify the current value once, returning false if another concurrent modification completes between the time the variable is read and the time it is set.

Attempts to modify the current value once, returning false if another concurrent modification completes between the time the variable is read and the time it is set.

Inherited from
Ref
def update(f: A => A): F[Unit]

Modifies the current value using the supplied update function. If another modification occurs between the time the current value is read and subsequently updated, the modification is retried using the new value. Hence, f may be invoked multiple times.

Modifies the current value using the supplied update function. If another modification occurs between the time the current value is read and subsequently updated, the modification is retried using the new value. Hence, f may be invoked multiple times.

Satisfies: r.update(_ => a) == r.set(a)

Inherited from
Ref
def updateAndGet(f: A => A): F[A]

Updates the current value using f, and returns the updated value.

Updates the current value using f, and returns the updated value.

Inherited from
Ref