=:=

scala.=:=
sealed abstract class =:=[From, To] extends From <:< To, Serializable

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

&lt;:&lt; 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
class From <:< To
trait Serializable
trait From => To
class Object
trait Matchable
class Any
Show all

Members list

Value members

Abstract methods

override def substituteBoth[F[_, _]](ftf: F[To, From]): F[From, To]

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

def andThen[C](r: To =:= C): From =:= C

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

override def apply(f: From): To

Coerce a From into a To. This is guaranteed to be the identity function.

Coerce a From into a To. This is guaranteed to be the identity function.

This method is often called implicitly as an implicit A =:= B doubles as an implicit view A => B.

Attributes

Definition Classes
def compose[C](r: C =:= From): C =:= To

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

def flip: To =:= From

If From = To then To = From (equality is symmetric)

If From = To then To = From (equality is symmetric)

Attributes

override def liftCo[F[_]]: F[From] =:= F[To]

Lift this evidence over any type constructor F.

Lift this evidence over any type constructor F.

Attributes

Definition Classes
<:<
override def liftContra[F[_]]: F[To] =:= F[From]

Lift this evidence over the type constructor F, but flipped.

Lift this evidence over the type constructor F, but flipped.

Attributes

Definition Classes
<:<
override def substituteCo[F[_]](ff: F[From]): F[To]

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
<:<
override def substituteContra[F[_]](ft: F[To]): F[From]

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

def andThen[C](r: To <:< C): From <:< C

If From <: To and To <: C, then From <: C (subtyping is transitive)

If From <: To and To <: C, then From <: C (subtyping is transitive)

Attributes

Inherited from:
<:<
override def andThen[C](r: To => C): From => C

Composes two instances of Function1 in a new Function1, with this function applied first.

Composes two instances of Function1 in a new Function1, with this function applied first.

Type parameters

A

the result type of function g

Value parameters

g

a function R => A

Attributes

Returns

a new function f such that f(x) == g(apply(x))

Definition Classes
Inherited from:
<:<
def compose[C](r: C <:< From): C <:< To

If From <: To and C <: From, then C <: To (subtyping is transitive)

If From <: To and C <: From, then C <: To (subtyping is transitive)

Attributes

Inherited from:
<:<
override def compose[C](r: C => From): C => To

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 g can be applied

Value parameters

g

a function A => T1

Attributes

Returns

a new function f such that f(x) == apply(g(x))

Definition Classes
Inherited from:
<:<
override def toString(): String

Returns a string representation of the object.

Returns a string representation of the object.

The default representation is platform dependent.

Attributes

Returns

a string representation of the object.

Definition Classes
Function1 -> Any
Inherited from:
Function1