@@ -25,13 +25,13 @@ object preciseDefs:
25
25
final val list1hi = id(1 :: " hi" :: Nil )
26
26
val list1hiTest : List [1 | " hi" ] = list1hi
27
27
28
- val c : Boolean = ???
28
+ val c : Boolean = ???
29
29
val ifVal = idBox(if c then 2 else 3 )
30
30
val ifValTest : Box [2 | 3 ] = ifVal
31
31
32
32
def huge [@ precise T1 , T2 , T3 , @ precise T4 , @ precise T5 ](
33
- t1 : T1 , t2 : T2 , r : Int
34
- )(t3 : T3 , r2 : Int , t4 : T4 )(t5 : T5 * ): Box [(T1 , T2 , T3 , T4 , T5 )] = ???
33
+ t1 : T1 , t2 : T2 , r : Int
34
+ )(t3 : T3 , r2 : Int , t4 : T4 )(t5 : T5 * ): Box [(T1 , T2 , T3 , T4 , T5 )] = ???
35
35
36
36
val h1 = huge((1 , 2 ), (3 , 4 ), 5 )((6 , 7 ), 8 , (9 , 10 ))(11 , 12 )
37
37
val h1Test : Box [((1 , 2 ), (Int , Int ), (Int , Int ), (9 , 10 ), 11 | 12 )] = h1
@@ -44,11 +44,11 @@ object preciseUpperBound:
44
44
45
45
46
46
object preciseDepArgs :
47
- def same [@ precise T ](x : T , y : T ) : Box [T ] = ???
47
+ def same [@ precise T ](x : T , y : T ): Box [T ] = ???
48
48
final val sameVal = same(1 , 2 )
49
49
val sameValTest : Box [1 | 2 ] = sameVal
50
50
51
- def sameVarArgs [@ precise T ](a : T * ) : Box [T ] = ???
51
+ def sameVarArgs [@ precise T ](a : T * ): Box [T ] = ???
52
52
final val sameVal123hi = sameVarArgs(1 , 2 , 3 , " hi" )
53
53
val sameVal123hiTest : Box [1 | 2 | 3 | " hi" ] = sameVal123hi
54
54
@@ -67,7 +67,7 @@ object preciseDepArgs:
67
67
68
68
69
69
object preciseExtendClassArgs :
70
- class Foo [@ precise T ](val value : T )
70
+ class Foo [@ precise T ](val value : T )
71
71
72
72
object Bar extends Foo (5 )
73
73
val barTest : 5 = Bar .value
@@ -77,7 +77,7 @@ object preciseExtendClassArgs:
77
77
78
78
79
79
object preciseEnums :
80
- enum Foo [@ precise T ](val value : T ):
80
+ enum Foo [@ precise T ](val value : T ):
81
81
case Bar extends Foo (5 )
82
82
case Baz extends Foo ((1 , 2 ))
83
83
@@ -105,10 +105,10 @@ object preciseDefaultValues:
105
105
106
106
107
107
object preciseGivens :
108
- given one : 1 = 1
109
- def fetch [@ precise T <: Int ](using T ) : Box [T ] = ???
108
+ given one : 1 = 1
109
+ def fetch [@ precise T <: Int ](using T ): Box [T ] = ???
110
110
val f = fetch
111
- val fTest : Box [1 ] = f
111
+ val fTest : Box [1 ] = f
112
112
113
113
class PreciseBox [@ precise T ]
114
114
given [T ]: PreciseBox [T ] with {}
@@ -117,7 +117,7 @@ object preciseGivens:
117
117
val c1 = check(1 )
118
118
val c1Test : Box [Int ] = c1
119
119
120
- def foo [@ precise T : Box ](arg : T ): Box [T ] = summon[Box [T ]]
120
+ def foo [@ precise T : Box ](arg : T ): Box [T ] = summon[Box [T ]]
121
121
object fooTest :
122
122
given Box [1 ] = new Box [1 ](1 )
123
123
val x = foo(1 )
@@ -179,10 +179,26 @@ object preciseCovariance:
179
179
val fbic12Test : Inv [Int , 2 ] = fbic12
180
180
181
181
182
+ object preciseCovariantComposition :
183
+ object direct :
184
+ class BoxC [@ precise + A ]
185
+ def fromBox [B ](x : Box [BoxC [B ]]): BoxC [B ] = ???
186
+ val bb1 : Box [BoxC [1 ]] = ???
187
+ val frombb1 = fromBox(bb1)
188
+ val frombb1Test : BoxC [1 ] = frombb1
189
+
190
+ object boring :
191
+ class BoxC [@ precise + A ]
192
+ def fromBox [B ](x : BoxC [(1 , B )]): BoxC [B ] = ???
193
+ val b1 : BoxC [(1 , 1 )] = ???
194
+ val fromb1 = fromBox(b1)
195
+ val fromb1Test : BoxC [1 ] = fromb1
196
+
197
+
182
198
object preciseCovariantOpaque :
183
199
opaque type BoxC [@ precise + A ] = A
184
200
def fromBox [B <: Any ](x : BoxC [B ]): BoxC [B ] = x
185
- val b1 : BoxC [1 ] = ???
201
+ val b1 : BoxC [1 ] = ???
186
202
val b11 = fromBox(b1)
187
203
val b11Test : BoxC [1 ] = b11
188
204
@@ -264,14 +280,14 @@ object preciseCovarianceWithCompiletimeOps:
264
280
import compiletime .ops .int .+
265
281
class Inlined [@ precise + T <: Int ]
266
282
extension [T <: Int ](lhs : Inlined [T ])
267
- def inc : Inlined [T + 1 ] = ???
283
+ def inc : Inlined [T + 1 ] = ???
268
284
269
285
val i1 = Inlined [1 ]
270
286
val i3 : Inlined [3 ] = i1.inc.inc
271
287
272
288
273
289
object preciseByName :
274
- def id [@ precise T ](t : => T ): Box [T ] = ???
290
+ def id [@ precise T ](t : => T ): Box [T ] = ???
275
291
val x = id(1 )
276
292
val xTest : Box [1 ] = x
277
293
val y = id((1 , 2 ))
@@ -280,7 +296,7 @@ object preciseByName:
280
296
281
297
object preciseFuncX :
282
298
object func0 :
283
- def id [@ precise T ](t : () => T ): Box [T ] = ???
299
+ def id [@ precise T ](t : () => T ): Box [T ] = ???
284
300
val x = id(() => 1 )
285
301
val xTest : Box [1 ] = x
286
302
val y = id(() => (1 , 2 ))
@@ -357,9 +373,9 @@ object preciseImplicitConversion:
357
373
358
374
359
375
object preciseImplicitConversionNewStyle :
360
- given toBoxFromTuple [@ precise T <: Tuple ] : Conversion [T , Box [T ]] = Box (_)
361
- given toBoxFromInt [@ precise T <: Int ] : Conversion [T , Box [T ]] = Box (_)
362
- given toBoxFromString [T <: String ] : Conversion [T , Box [T ]] = Box (_)
376
+ given toBoxFromTuple [@ precise T <: Tuple ]: Conversion [T , Box [T ]] = Box (_)
377
+ given toBoxFromInt [@ precise T <: Int ]: Conversion [T , Box [T ]] = Box (_)
378
+ given toBoxFromString [T <: String ]: Conversion [T , Box [T ]] = Box (_)
363
379
def box [T1 , T2 , T3 , @ precise T4 , T5 ](
364
380
b1 : Box [T1 ], b2 : Box [T2 ], r : Int , b3 : Box [T3 ]
365
381
)(
@@ -375,7 +391,7 @@ object preciseImplicitConversionNewStyle:
375
391
376
392
object precisePolymorphicTypesAndValues :
377
393
type Id1 = [@ precise T ] => T => Box [T ]
378
- val id1Check : Id1 = [T ] => (t : T ) => Box (t) // error
394
+ val id1Check : Id1 = [T ] => (t : T ) => Box (t) // error
379
395
380
396
type Id2 = [T ] => T => Box [T ]
381
397
val id2Check : Id2 = [@ precise T ] => (t : T ) => Box (t) // error
0 commit comments