trait Differ[Value, Patch] extends Serializable
A Differ[Value, Patch] knows how to compare an old value and new value of
type Value to produce a patch of type Patch that describes the
differences between those values. A Differ also knows how to apply a patch
to an old value to produce a new value that represents the old value updated
with the changes described by the patch.
A Differ can be used to construct a FiberRef supporting compositional
updates using the FiberRef.makePatch constructor.
The Differ companion object contains constructors for Differ values for
common data types such as Chunk, Map, and Set. In addition, Differ
values can be transformed using the transform operator and combined using
the orElseEither and zip operators. This allows creating Differ values
for arbitrarily complex data types compositionally.
- Self Type
- Differ[Value, Patch]
- Alphabetic
- By Inheritance
- Differ
- Serializable
- AnyRef
- Any
- Hide All
- Show All
- Public
- Protected
Abstract Value Members
- abstract def combine(first: Patch, second: Patch): Patch
Combines two patches to produce a new patch that describes the updates of the first patch and then the updates of the second patch.
Combines two patches to produce a new patch that describes the updates of the first patch and then the updates of the second patch. The combine operation should be associative. In addition, if the combine operation is commutative then joining multiple fibers concurrently will result in deterministic
FiberRefvalues. - abstract def diff(oldValue: Value, newValue: Value): Patch
Constructs a patch describing the updates to a value from an old value and a new value.
- abstract def empty: Patch
An empty patch that describes no changes.
- abstract def patch(patch: Patch)(oldValue: Value): Value
Applies a patch to an old value to produce a new value that is equal to the old value with the updates described by the patch.
Concrete Value Members
- final def !=(arg0: Any): Boolean
- Definition Classes
- AnyRef → Any
- final def ##: Int
- Definition Classes
- AnyRef → Any
- final def <*>[Value2, Patch2](that: Differ[Value2, Patch2]): Differ[(Value, Value2), (Patch, Patch2)]
A symbolic alias for
zip. - final def <+>[Value2, Patch2](that: Differ[Value2, Patch2]): Differ[Either[Value, Value2], OrPatch[Value, Value2, Patch, Patch2]]
A symbolic alias for
orElseEither. - final def ==(arg0: Any): Boolean
- Definition Classes
- AnyRef → Any
- final def asInstanceOf[T0]: T0
- Definition Classes
- Any
- def clone(): AnyRef
- Attributes
- protected[lang]
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.CloneNotSupportedException]) @native()
- final def eq(arg0: AnyRef): Boolean
- Definition Classes
- AnyRef
- def equals(arg0: AnyRef): Boolean
- Definition Classes
- AnyRef → Any
- final def getClass(): Class[_ <: AnyRef]
- Definition Classes
- AnyRef → Any
- Annotations
- @native()
- def hashCode(): Int
- Definition Classes
- AnyRef → Any
- Annotations
- @native()
- final def isInstanceOf[T0]: Boolean
- Definition Classes
- Any
- final def ne(arg0: AnyRef): Boolean
- Definition Classes
- AnyRef
- final def notify(): Unit
- Definition Classes
- AnyRef
- Annotations
- @native()
- final def notifyAll(): Unit
- Definition Classes
- AnyRef
- Annotations
- @native()
- final def orElseEither[Value2, Patch2](that: Differ[Value2, Patch2]): Differ[Either[Value, Value2], OrPatch[Value, Value2, Patch, Patch2]]
Combines this differ and the specified differ to produce a differ that knows how to diff the sum of their values.
- final def synchronized[T0](arg0: => T0): T0
- Definition Classes
- AnyRef
- def toString(): String
- Definition Classes
- AnyRef → Any
- final def transform[Value2](f: (Value) => Value2, g: (Value2) => Value): Differ[Value2, Patch]
Transforms the type of values that this differ knows how to differ using the specified functions that map the new and old value types to each other.
- final def wait(): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.InterruptedException])
- final def wait(arg0: Long, arg1: Int): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.InterruptedException])
- final def wait(arg0: Long): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.InterruptedException]) @native()
- final def zip[Value2, Patch2](that: Differ[Value2, Patch2]): Differ[(Value, Value2), (Patch, Patch2)]
Combines this differ and the specified differ to produce a new differ that knows how to diff the product of their values.