Ref

abstract class Ref[F <: ([_$1] =>> Any), A]
An asynchronous, concurrent mutable reference.
Provides safe concurrent access and modification of its content, but no
functionality for synchronisation, which is instead handled by Deferred.
For this reason, a Ref is always initialised to a value.
The default implementation is nonblocking and lightweight, consisting essentially
of a purely functional wrapper over an AtomicReference.
Companion
object
class Object
trait Matchable
class Any

Value members

Methods

def get: F[A]
Obtains the current value.
Since Ref is always guaranteed to have a value, the returned action
completes immediately after being bound.
def set(a: A): F[Unit]
Sets the current value to a.
The returned action completes after the reference has been successfully set.
Satisfies:
r.set(fa) *> r.get == fa
def getAndUpdate(f: A => A): F[A]
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.
def getAndSet(a: A): F[A]
Replaces the current value with a, returning the previous value.
def updateAndGet(f: A => A): F[A]
Updates the current value using f, and returns the updated value.
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.
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)
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.
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.
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.
Satisfies:
r.update(_ => a) == r.set(a)
def modify[B](f: A => (A, B)): F[B]
Like tryModify but does not complete until the update has been successfully made.
def tryModifyState[B](state: State[A, B]): F[Option[B]]
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.
def modifyState[B](state: State[A, B]): F[B]
Like tryModifyState but retries the modification until successful.
def mapK[G <: ([_$3] =>> Any)](f: FunctionK[F, G])(F: Functor[F]): Ref[G, A]
Modify the context F using transformation f.