=:=
An instance of A =:= B witnesses that the types A and B are equal. It also acts as a A <:< B, but not a B <:< A (directly) due to restrictions on subclassing.
In case of any confusion over which method goes in what direction, all the "Co" methods (including apply) go from left to right in the type ("with" the type), and all the "Contra" methods go from right to left ("against" the type). E.g., apply turns a From into a To, and substituteContra replaces the Tos in a type with Froms.
Type parameters
- From
-
a type which is proved equal to
To - To
-
a type which is proved equal to
From
Attributes
- See also
-
<:< for expressing subtyping constraints
- Example
-
An in-place variant of scala.collection.mutable.ArrayBuffer#transpose
implicit class BufOps[A](private val buf: ArrayBuffer[A]) extends AnyVal { def inPlaceTranspose[E]()(implicit ev: A =:= ArrayBuffer[E]) = ??? // Because ArrayBuffer is invariant, we can't make do with just a A <:< ArrayBuffer[E] // Getting buffers *out* from buf would work, but adding them back *in* wouldn't. } - Graph
-
- Supertypes
Members list
Value members
Abstract methods
Substitute To for From and From for To in the type F[To, From], given that F is a type constructor of two arguments. Essentially swaps To and From in ftf's type.
Substitute To for From and From for To in the type F[To, From], given that F is a type constructor of two arguments. Essentially swaps To and From in ftf's type.
Equivalent in power to each of substituteCo and substituteContra.
This method is impossible to implement without throwing or otherwise "cheating" unless From = To, so it ensures that this really represents a type equality.
Attributes
- Returns
-
ftf, $sameDiff - Definition Classes
Concrete methods
If From = To and To = C, then From = C (equality is transitive)
If From = To and To = C, then From = C (equality is transitive)
Attributes
If From = To and C = From, then C = To (equality is transitive)
If From = To and C = From, then C = To (equality is transitive)
Attributes
If From = To then To = From (equality is symmetric)
If From = To then To = From (equality is symmetric)
Attributes
Lift this evidence over any type constructor F.
Lift this evidence over the type constructor F, but flipped.
Substitute the From in the type F[From], where F is any type constructor, for To.
Substitute the From in the type F[From], where F is any type constructor, for To.
Equivalent in power to each of substituteBoth and substituteContra.
This method is impossible to implement without throwing or otherwise "cheating" unless From = To, so it ensures that this really represents a type equality.
Attributes
- Returns
-
ff, $sameDiff - Definition Classes
Substitute the To in the type F[To], where F is any type constructor, for From.
Substitute the To in the type F[To], where F is any type constructor, for From.
Equivalent in power to each of substituteBoth and substituteCo.
This method is impossible to implement without throwing or otherwise "cheating" unless From = To, so it ensures that this really represents a type equality.
Attributes
- Returns
-
ft, $sameDiff - Definition Classes
Inherited methods
If From <: To and To <: C, then From <: C (subtyping is transitive)
Composes two instances of Function1 in a new Function1, with this function applied first.
If From <: To and C <: From, then C <: To (subtyping is transitive)
Composes two instances of Function1 in a new Function1, with this function applied last.
Composes two instances of Function1 in a new Function1, with this function applied last.
Type parameters
- A
-
the type to which function
gcan be applied
Value parameters
- g
-
a function A => T1
Attributes
- Returns
-
a new function
fsuch thatf(x) == apply(g(x)) - Definition Classes
- Inherited from:
- <:<