=:=
An instance of A =:= B
witnesses that the types A
and B
are equal.
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 To
s in a type with From
s.
- Type Params
- From
a type which is proved equal to
To
- To
a type which is proved equal to
From
- 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. }
Value members
Abstract methods
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)
If From = To
and C = From
, then C = To
(equality is transitive)
If From = To
and C = From
, then C = To
(equality is transitive)
If From = To
then To = From
(equality is symmetric)
If From = To
then To = From
(equality is symmetric)
Inherited methods
If From <: To
and To <: C
, then From <: C
(subtyping is transitive)
If From <: To
and To <: C
, then From <: C
(subtyping is transitive)
- Inherited from
- <:<
If From <: To
and C <: From
, then C <: To
(subtyping is transitive)
If From <: To
and C <: From
, then C <: To
(subtyping is transitive)
- Inherited from
- <:<