Skip to content

Commit 9ca4c16

Browse files
committed
Fix #2698: Move eqXYZ instances to Eq
1 parent 1d05796 commit 9ca4c16

File tree

2 files changed

+37
-33
lines changed

2 files changed

+37
-33
lines changed

library/src/dotty/DottyPredef.scala

Lines changed: 2 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -6,46 +6,16 @@ import scala.collection.Seq
66

77
/** unimplemented implicit for TypeTag */
88
object DottyPredef {
9+
910
/** A fall-back implicit to compare values of any types.
1011
* The compiler will restrict implicit instances of `eqAny`. An instance
1112
* `eqAny[T, U]` is _valid_ if `T <: U` or `U <: T` or both `T` and `U` are
1213
* Eq-free. A type `S` is Eq-free if there is no implicit instance of `Eq[S, S]`.
1314
* An implicit search will fail instead of returning an invalid `eqAny` instance.
15+
* The method is here instead of the `Eq` object so that it can be disabled.
1416
*/
1517
implicit def eqAny[L, R]: Eq[L, R] = Eq
1618

17-
implicit def eqNumber : Eq[Number, Number] = Eq
18-
implicit def eqString : Eq[String, String] = Eq
19-
implicit def eqBoolean : Eq[Boolean, Boolean] = Eq
20-
implicit def eqByte : Eq[Byte, Byte] = Eq
21-
implicit def eqShort : Eq[Short, Short] = Eq
22-
implicit def eqChar : Eq[Char, Char] = Eq
23-
implicit def eqInt : Eq[Int, Int] = Eq
24-
implicit def eqLong : Eq[Long, Long] = Eq
25-
implicit def eqFloat : Eq[Float, Float] = Eq
26-
implicit def eqDouble : Eq[Double, Double] = Eq
27-
implicit def eqUnit : Eq[Unit, Unit] = Eq
28-
29-
// true asymmetry, modeling the (somewhat problematic) nature of equals on Proxies
30-
implicit def eqProxy : Eq[Proxy, Any] = Eq
31-
32-
implicit def eqSeq[T, U](implicit eq: Eq[T, U]): Eq[Seq[T], Seq[U]] = Eq
33-
34-
implicit def eqByteNum : Eq[Byte, Number] = Eq
35-
implicit def eqNumByte : Eq[Number, Byte] = Eq
36-
implicit def eqCharNum : Eq[Char, Number] = Eq
37-
implicit def eqNumChar : Eq[Number, Char] = Eq
38-
implicit def eqShortNum : Eq[Short, Number] = Eq
39-
implicit def eqNumShort : Eq[Number, Short] = Eq
40-
implicit def eqIntNum : Eq[Int, Number] = Eq
41-
implicit def eqNumInt : Eq[Number, Int] = Eq
42-
implicit def eqLongNum : Eq[Long, Number] = Eq
43-
implicit def eqNumLong : Eq[Number, Long] = Eq
44-
implicit def eqFloatNum : Eq[Float, Number] = Eq
45-
implicit def eqNumFloat : Eq[Number, Float] = Eq
46-
implicit def eqDoubleNum: Eq[Double, Number] = Eq
47-
implicit def eqNumDouble: Eq[Number, Double] = Eq
48-
4919
/** A class for implicit values that can serve as implicit conversions
5020
* The implicit resolution algorithm will act as if there existed
5121
* the additional implicit definition:

library/src/scala/Eq.scala

Lines changed: 35 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,5 +10,39 @@ sealed trait Eq[-L, -R]
1010
* can also be used as a value that's compatible with
1111
* any instance of `Eq`.
1212
*/
13-
object Eq extends Eq[Any, Any]
13+
object Eq extends Eq[Any, Any] {
1414

15+
// Instances of `Eq` for common types
16+
17+
implicit def eqNumber : Eq[Number, Number] = Eq
18+
implicit def eqString : Eq[String, String] = Eq
19+
implicit def eqBoolean : Eq[Boolean, Boolean] = Eq
20+
implicit def eqByte : Eq[Byte, Byte] = Eq
21+
implicit def eqShort : Eq[Short, Short] = Eq
22+
implicit def eqChar : Eq[Char, Char] = Eq
23+
implicit def eqInt : Eq[Int, Int] = Eq
24+
implicit def eqLong : Eq[Long, Long] = Eq
25+
implicit def eqFloat : Eq[Float, Float] = Eq
26+
implicit def eqDouble : Eq[Double, Double] = Eq
27+
implicit def eqUnit : Eq[Unit, Unit] = Eq
28+
29+
// true asymmetry, modeling the (somewhat problematic) nature of equals on Proxies
30+
implicit def eqProxy : Eq[Proxy, Any] = Eq
31+
32+
implicit def eqSeq[T, U](implicit eq: Eq[T, U]): Eq[Seq[T], Seq[U]] = Eq
33+
34+
implicit def eqByteNum : Eq[Byte, Number] = Eq
35+
implicit def eqNumByte : Eq[Number, Byte] = Eq
36+
implicit def eqCharNum : Eq[Char, Number] = Eq
37+
implicit def eqNumChar : Eq[Number, Char] = Eq
38+
implicit def eqShortNum : Eq[Short, Number] = Eq
39+
implicit def eqNumShort : Eq[Number, Short] = Eq
40+
implicit def eqIntNum : Eq[Int, Number] = Eq
41+
implicit def eqNumInt : Eq[Number, Int] = Eq
42+
implicit def eqLongNum : Eq[Long, Number] = Eq
43+
implicit def eqNumLong : Eq[Number, Long] = Eq
44+
implicit def eqFloatNum : Eq[Float, Number] = Eq
45+
implicit def eqNumFloat : Eq[Number, Float] = Eq
46+
implicit def eqDoubleNum: Eq[Double, Number] = Eq
47+
implicit def eqNumDouble: Eq[Number, Double] = Eq
48+
}

0 commit comments

Comments
 (0)