Skip to content

Commit 123caff

Browse files
authored
Merge pull request #14452 from dotty-staging/mb/compiletime-ops-covariant
Make singleton operations covariant
2 parents fd22547 + 23609ec commit 123caff

File tree

8 files changed

+100
-92
lines changed

8 files changed

+100
-92
lines changed

library/src/scala/compiletime/ops/any.scala

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ object any:
1212
* ```
1313
* @syntax markdown
1414
*/
15-
type ==[X, Y] <: Boolean
15+
type ==[+X, +Y] <: Boolean
1616

1717
/** Inequality comparison of two singleton types.
1818
* ```scala
@@ -22,7 +22,7 @@ object any:
2222
* ```
2323
* @syntax markdown
2424
*/
25-
type !=[X, Y] <: Boolean
25+
type !=[+X, +Y] <: Boolean
2626

2727
/** Tests if a type is a constant.
2828
* ```scala
@@ -52,4 +52,4 @@ object any:
5252
* @syntax markdown
5353
*/
5454
@experimental
55-
type ToString[X] <: String
55+
type ToString[+X] <: String

library/src/scala/compiletime/ops/boolean.scala

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ object boolean:
1010
* ```
1111
* @syntax markdown
1212
*/
13-
type ![X <: Boolean] <: Boolean
13+
type ![+X <: Boolean] <: Boolean
1414

1515
/** Exclusive disjunction of two `Boolean` singleton types.
1616
* ```scala
@@ -19,7 +19,7 @@ object boolean:
1919
* ```
2020
* @syntax markdown
2121
*/
22-
type ^[X <: Boolean, Y <: Boolean] <: Boolean
22+
type ^[+X <: Boolean, +Y <: Boolean] <: Boolean
2323

2424
/** Conjunction of two `Boolean` singleton types.
2525
* ```scala
@@ -28,7 +28,7 @@ object boolean:
2828
* ```
2929
* @syntax markdown
3030
*/
31-
type &&[X <: Boolean, Y <: Boolean] <: Boolean
31+
type &&[+X <: Boolean, +Y <: Boolean] <: Boolean
3232

3333
/** Disjunction of two `Boolean` singleton types.
3434
* ```scala
@@ -37,4 +37,4 @@ object boolean:
3737
* ```
3838
* @syntax markdown
3939
*/
40-
type ||[X <: Boolean, Y <: Boolean] <: Boolean
40+
type ||[+X <: Boolean, +Y <: Boolean] <: Boolean

library/src/scala/compiletime/ops/double.scala

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -11,39 +11,39 @@ object double:
1111
* ```
1212
* @syntax markdown
1313
*/
14-
type +[X <: Double, Y <: Double] <: Double
14+
type +[+X <: Double, +Y <: Double] <: Double
1515

1616
/** Subtraction of two `Double` singleton types.
1717
* ```scala
1818
* val sub: 4.0 - 2.0 = 2.0
1919
* ```
2020
* @syntax markdown
2121
*/
22-
type -[X <: Double, Y <: Double] <: Double
22+
type -[+X <: Double, +Y <: Double] <: Double
2323

2424
/** Multiplication of two `Double` singleton types.
2525
* ```scala
2626
* val mul: 4.0 * 2.0 = 8.0
2727
* ```
2828
* @syntax markdown
2929
*/
30-
type *[X <: Double, Y <: Double] <: Double
30+
type *[+X <: Double, +Y <: Double] <: Double
3131

3232
/** Integer division of two `Double` singleton types.
3333
* ```scala
3434
* val div: 5.0 / 2.0 = 2.5
3535
* ```
3636
* @syntax markdown
3737
*/
38-
type /[X <: Double, Y <: Double] <: Double
38+
type /[+X <: Double, +Y <: Double] <: Double
3939

4040
/** Remainder of the division of `X` by `Y`.
4141
* ```scala
4242
* val mod: 5.0 % 2.0 = 1.0
4343
* ```
4444
* @syntax markdown
4545
*/
46-
type %[X <: Double, Y <: Double] <: Double
46+
type %[+X <: Double, +Y <: Double] <: Double
4747

4848
/** Less-than comparison of two `Double` singleton types.
4949
* ```scala
@@ -52,7 +52,7 @@ object double:
5252
* ```
5353
* @syntax markdown
5454
*/
55-
type <[X <: Double, Y <: Double] <: Boolean
55+
type <[+X <: Double, +Y <: Double] <: Boolean
5656

5757
/** Greater-than comparison of two `Double` singleton types.
5858
* ```scala
@@ -61,7 +61,7 @@ object double:
6161
* ```
6262
* @syntax markdown
6363
*/
64-
type >[X <: Double, Y <: Double] <: Boolean
64+
type >[+X <: Double, +Y <: Double] <: Boolean
6565

6666
/** Greater-or-equal comparison of two `Double` singleton types.
6767
* ```scala
@@ -70,7 +70,7 @@ object double:
7070
* ```
7171
* @syntax markdown
7272
*/
73-
type >=[X <: Double, Y <: Double] <: Boolean
73+
type >=[+X <: Double, +Y <: Double] <: Boolean
7474

7575
/** Less-or-equal comparison of two `Double` singleton types.
7676
* ```scala
@@ -79,15 +79,15 @@ object double:
7979
* ```
8080
* @syntax markdown
8181
*/
82-
type <=[X <: Double, Y <: Double] <: Boolean
82+
type <=[+X <: Double, +Y <: Double] <: Boolean
8383

8484
/** Absolute value of an `Double` singleton type.
8585
* ```scala
8686
* val abs: Abs[-1.0] = 1.0
8787
* ```
8888
* @syntax markdown
8989
*/
90-
type Abs[X <: Double] <: Double
90+
type Abs[+X <: Double] <: Double
9191

9292
/** Negation of an `Double` singleton type.
9393
* ```scala
@@ -96,44 +96,44 @@ object double:
9696
* ```
9797
* @syntax markdown
9898
*/
99-
type Negate[X <: Double] <: Double
99+
type Negate[+X <: Double] <: Double
100100

101101
/** Minimum of two `Double` singleton types.
102102
* ```scala
103103
* val min: Min[-1.0, 1.0] = -1.0
104104
* ```
105105
* @syntax markdown
106106
*/
107-
type Min[X <: Double, Y <: Double] <: Double
107+
type Min[+X <: Double, +Y <: Double] <: Double
108108

109109
/** Maximum of two `Double` singleton types.
110110
* ```scala
111111
* val max: Max[-1.0, 1.0] = 1.0
112112
* ```
113113
* @syntax markdown
114114
*/
115-
type Max[X <: Double, Y <: Double] <: Double
115+
type Max[+X <: Double, +Y <: Double] <: Double
116116

117117
/** Int conversion of a `Double` singleton type.
118118
* ```scala
119119
* val x: ToInt[1.0] = 1
120120
* ```
121121
* @syntax markdown
122122
*/
123-
type ToInt[X <: Double] <: Int
123+
type ToInt[+X <: Double] <: Int
124124

125125
/** Long conversion of a `Double` singleton type.
126126
* ```scala
127127
* val x: ToLong[1.0] = 1L
128128
* ```
129129
* @syntax markdown
130130
*/
131-
type ToLong[X <: Double] <: Long
131+
type ToLong[+X <: Double] <: Long
132132

133133
/** Float conversion of a `Double` singleton type.
134134
* ```scala
135135
* val x: ToFloat[1.0] = 1.0f
136136
* ```
137137
* @syntax markdown
138138
*/
139-
type ToFloat[X <: Double] <: Float
139+
type ToFloat[+X <: Double] <: Float

library/src/scala/compiletime/ops/float.scala

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -11,39 +11,39 @@ object float:
1111
* ```
1212
* @syntax markdown
1313
*/
14-
type +[X <: Float, Y <: Float] <: Float
14+
type +[+X <: Float, +Y <: Float] <: Float
1515

1616
/** Subtraction of two `Float` singleton types.
1717
* ```scala
1818
* val sub: 4.0f - 2.0f = 2.0f
1919
* ```
2020
* @syntax markdown
2121
*/
22-
type -[X <: Float, Y <: Float] <: Float
22+
type -[+X <: Float, +Y <: Float] <: Float
2323

2424
/** Multiplication of two `Float` singleton types.
2525
* ```scala
2626
* val mul: 4.0f * 2.0f = 8.0f
2727
* ```
2828
* @syntax markdown
2929
*/
30-
type *[X <: Float, Y <: Float] <: Float
30+
type *[+X <: Float, +Y <: Float] <: Float
3131

3232
/** Integer division of two `Float` singleton types.
3333
* ```scala
3434
* val div: 5.0f / 2.0f = 2.5f
3535
* ```
3636
* @syntax markdown
3737
*/
38-
type /[X <: Float, Y <: Float] <: Float
38+
type /[+X <: Float, +Y <: Float] <: Float
3939

4040
/** Remainder of the division of `X` by `Y`.
4141
* ```scala
4242
* val mod: 5.0f % 2.0f = 1.0f
4343
* ```
4444
* @syntax markdown
4545
*/
46-
type %[X <: Float, Y <: Float] <: Float
46+
type %[+X <: Float, +Y <: Float] <: Float
4747

4848
/** Less-than comparison of two `Float` singleton types.
4949
* ```scala
@@ -52,7 +52,7 @@ object float:
5252
* ```
5353
* @syntax markdown
5454
*/
55-
type <[X <: Float, Y <: Float] <: Boolean
55+
type <[+X <: Float, +Y <: Float] <: Boolean
5656

5757
/** Greater-than comparison of two `Float` singleton types.
5858
* ```scala
@@ -61,7 +61,7 @@ object float:
6161
* ```
6262
* @syntax markdown
6363
*/
64-
type >[X <: Float, Y <: Float] <: Boolean
64+
type >[+X <: Float, +Y <: Float] <: Boolean
6565

6666
/** Greater-or-equal comparison of two `Float` singleton types.
6767
* ```scala
@@ -70,7 +70,7 @@ object float:
7070
* ```
7171
* @syntax markdown
7272
*/
73-
type >=[X <: Float, Y <: Float] <: Boolean
73+
type >=[+X <: Float, +Y <: Float] <: Boolean
7474

7575
/** Less-or-equal comparison of two `Float` singleton types.
7676
* ```scala
@@ -79,15 +79,15 @@ object float:
7979
* ```
8080
* @syntax markdown
8181
*/
82-
type <=[X <: Float, Y <: Float] <: Boolean
82+
type <=[+X <: Float, +Y <: Float] <: Boolean
8383

8484
/** Absolute value of an `Float` singleton type.
8585
* ```scala
8686
* val abs: Abs[-1.0f] = 1.0f
8787
* ```
8888
* @syntax markdown
8989
*/
90-
type Abs[X <: Float] <: Float
90+
type Abs[+X <: Float] <: Float
9191

9292
/** Negation of an `Float` singleton type.
9393
* ```scala
@@ -96,44 +96,44 @@ object float:
9696
* ```
9797
* @syntax markdown
9898
*/
99-
type Negate[X <: Float] <: Float
99+
type Negate[+X <: Float] <: Float
100100

101101
/** Minimum of two `Float` singleton types.
102102
* ```scala
103103
* val min: Min[-1.0f, 1.0f] = -1.0f
104104
* ```
105105
* @syntax markdown
106106
*/
107-
type Min[X <: Float, Y <: Float] <: Float
107+
type Min[+X <: Float, +Y <: Float] <: Float
108108

109109
/** Maximum of two `Float` singleton types.
110110
* ```scala
111111
* val max: Max[-1.0f, 1.0f] = 1.0f
112112
* ```
113113
* @syntax markdown
114114
*/
115-
type Max[X <: Float, Y <: Float] <: Float
115+
type Max[+X <: Float, +Y <: Float] <: Float
116116

117117
/** Int conversion of a `Float` singleton type.
118118
* ```scala
119119
* val x: ToInt[1.0f] = 1
120120
* ```
121121
* @syntax markdown
122122
*/
123-
type ToInt[X <: Float] <: Int
123+
type ToInt[+X <: Float] <: Int
124124

125125
/** Long conversion of a `Float` singleton type.
126126
* ```scala
127127
* val x: ToLong[1.0f] = 1L
128128
* ```
129129
* @syntax markdown
130130
*/
131-
type ToLong[X <: Float] <: Long
131+
type ToLong[+X <: Float] <: Long
132132

133133
/** Double conversion of a `Float` singleton type.
134134
* ```scala
135135
* val x: ToDouble[1.0f] = 1.0
136136
* ```
137137
* @syntax markdown
138138
*/
139-
type ToDouble[X <: Float] <: Double
139+
type ToDouble[+X <: Float] <: Double

0 commit comments

Comments
 (0)