ZTRef

sealed abstract class ZTRef[+EA, +EB, -A, +B] extends Serializable

A ZTRef[EA, EB, A, B] is a polymorphic, purely functional description of a mutable reference that can be modified as part of a transactional effect. The fundamental operations of a ZTRef are set and get. set takes a value of type A and transactionally sets the reference to a new value, potentially failing with an error of type EA. get gets the current value of the reference and returns a value of type B, potentially failing with an error of type EB.

When the error and value types of the ZTRef are unified, that is, it is a ZTRef[E, E, A, A], the ZTRef also supports atomic modify and update operations. All operations are guaranteed to be executed transactionally.

NOTE: While ZTRef provides the transactional equivalent of a mutable reference, the value inside the ZTRef should be immutable. For performance reasons ZTRef is implemented in terms of compare and swap operations rather than synchronization. These operations are not safe for mutable values that do not support concurrent access.

Companion:
object
class Object
trait Matchable
class Any
ZTRef[EA, EB, A, B]

Value members

Abstract methods

def fold[EC, ED, C, D](ea: EA => EC, eb: EB => ED, ca: C => Either[EC, A], bd: B => Either[ED, D]): ZTRef[EC, ED, C, D]

Folds over the error and value types of the ZTRef. This is a highly polymorphic method that is capable of arbitrarily transforming the error and value types of the ZTRef. For most use cases one of the more specific combinators implemented in terms of fold will be more ergonomic but this method is extremely useful for implementing new combinators.

Folds over the error and value types of the ZTRef. This is a highly polymorphic method that is capable of arbitrarily transforming the error and value types of the ZTRef. For most use cases one of the more specific combinators implemented in terms of fold will be more ergonomic but this method is extremely useful for implementing new combinators.

def foldAll[EC, ED, C, D](ea: EA => EC, eb: EB => ED, ec: EB => EC, ca: C => B => Either[EC, A], bd: B => Either[ED, D]): ZTRef[EC, ED, C, D]

Folds over the error and value types of the ZTRef, allowing access to the state in transforming the set value. This is a more powerful version of fold but requires unifying the error types.

Folds over the error and value types of the ZTRef, allowing access to the state in transforming the set value. This is a more powerful version of fold but requires unifying the error types.

def get: STM[EB, B]

Retrieves the value of the ZTRef.

Retrieves the value of the ZTRef.

def set(a: A): STM[EA, Unit]

Sets the value of the ZTRef.

Sets the value of the ZTRef.

Concrete methods

final def collect[C](pf: PartialFunction[B, C]): ZTRef[EA, Option[EB], A, C]

Maps and filters the get value of the ZTRef with the specified partial function, returning a ZTRef with a get value that succeeds with the result of the partial function if it is defined or else fails with None.

Maps and filters the get value of the ZTRef with the specified partial function, returning a ZTRef with a get value that succeeds with the result of the partial function if it is defined or else fails with None.

final def contramap[C](f: C => A): ZTRef[EA, EB, C, B]

Transforms the set value of the ZTRef with the specified function.

Transforms the set value of the ZTRef with the specified function.

final def contramapEither[EC >: EA, C](f: C => Either[EC, A]): ZTRef[EC, EB, C, B]

Transforms the set value of the ZTRef with the specified fallible function.

Transforms the set value of the ZTRef with the specified fallible function.

final def dimap[C, D](f: C => A, g: B => D): ZTRef[EA, EB, C, D]

Transforms both the set and get values of the ZTRef with the specified functions.

Transforms both the set and get values of the ZTRef with the specified functions.

final def dimapEither[EC >: EA, ED >: EB, C, D](f: C => Either[EC, A], g: B => Either[ED, D]): ZTRef[EC, ED, C, D]

Transforms both the set and get values of the ZTRef with the specified fallible functions.

Transforms both the set and get values of the ZTRef with the specified fallible functions.

final def dimapError[EC, ED](f: EA => EC, g: EB => ED): ZTRef[EC, ED, A, B]

Transforms both the set and get errors of the ZTRef with the specified functions.

Transforms both the set and get errors of the ZTRef with the specified functions.

final def filterInput[A1 <: A](f: A1 => Boolean): ZTRef[Option[EA], EB, A1, B]

Filters the set value of the ZTRef with the specified predicate, returning a ZTRef with a set value that succeeds if the predicate is satisfied or else fails with None.

Filters the set value of the ZTRef with the specified predicate, returning a ZTRef with a set value that succeeds if the predicate is satisfied or else fails with None.

final def filterOutput(f: B => Boolean): ZTRef[EA, Option[EB], A, B]

Filters the get value of the ZTRef with the specified predicate, returning a ZTRef with a get value that succeeds if the predicate is satisfied or else fails with None.

Filters the get value of the ZTRef with the specified predicate, returning a ZTRef with a get value that succeeds if the predicate is satisfied or else fails with None.

def foldAllM[EC, ED, C, D](ea: EA => EC, eb: EB => ED, ec: EB => EC, ca: C => B => STM[EC, A], bd: B => STM[ED, D]): ZTRef[EC, ED, C, D]

Folds over the error and value types of the ZTRef, allowing access to the state in transforming the set value. This is a more powerful version of fold but requires unifying the error types.

Folds over the error and value types of the ZTRef, allowing access to the state in transforming the set value. This is a more powerful version of fold but requires unifying the error types.

def foldM[EC, ED, C, D](ea: EA => EC, eb: EB => ED, ca: C => STM[EC, A], bd: B => STM[ED, D]): ZTRef[EC, ED, C, D]

Folds over the error and value types of the ZTRef. This is a highly polymorphic method that is capable of arbitrarily transforming the error and value types of the ZTRef. For most use cases one of the more specific combinators implemented in terms of fold will be more ergonomic but this method is extremely useful for implementing new combinators.

Folds over the error and value types of the ZTRef. This is a highly polymorphic method that is capable of arbitrarily transforming the error and value types of the ZTRef. For most use cases one of the more specific combinators implemented in terms of fold will be more ergonomic but this method is extremely useful for implementing new combinators.

final def map[C](f: B => C): ZTRef[EA, EB, A, C]

Transforms the get value of the ZTRef with the specified function.

Transforms the get value of the ZTRef with the specified function.

final def mapEither[EC >: EB, C](f: B => Either[EC, C]): ZTRef[EA, EC, A, C]

Transforms the get value of the ZTRef with the specified fallible function.

Transforms the get value of the ZTRef with the specified fallible function.

final def readOnly: ZTRef[EA, EB, Nothing, B]

Returns a read only view of the ZTRef.

Returns a read only view of the ZTRef.

final def writeOnly: ZTRef[EA, Unit, A, Nothing]

Returns a write only view of the ZTRef.

Returns a write only view of the ZTRef.