@@ -42,32 +42,26 @@ val zzz = x ^^^ x ^^^ x
42
42
43
43
44
44
object Minimized :
45
- trait DFVal [+ T <: Int , + P ]
46
45
47
- trait Summon [ R , T <: R ]
48
- given [R , T <: R ]: Summon [ R , T ] with {}
46
+ trait Sub [ T , R >: T ]
47
+ given [T , R >: T ]: Sub [ T , R ] with {}
49
48
50
- trait Candidate [R ]:
51
- type OutW <: Int
49
+ trait Candidate [- R ]:
52
50
type OutP
53
- given [W <: Int , P , R <: DFVal [W , P ]]: Candidate [R ] with
54
- type OutW = W
51
+ given [P ]: Candidate [Option [P ]] with
55
52
type OutP = P
56
53
57
- extension [L <: DFVal [Int , Any ]](lhs : L )(using icL : Candidate [L ])
58
- def ^^^ [R ](rhs : R )
59
- (using icR : Candidate [R ])
60
- : DFVal [icL.OutW , icL.OutP | icR.OutP ] = ???
54
+ extension [L <: Option [Any ]](lhs : L )(using icL : Candidate [L ])
55
+ def ^^^ [R ](rhs : R )(using icR : Candidate [R ]): Option [icL.OutP | icR.OutP ] = ???
61
56
def ^^^ : Unit = ???
62
57
63
58
extension [L ](lhs : L )
64
- def ^^^ [RW <: Int , RP ](rhs : DFVal [RW , RP ])
65
- (using es : Summon [L , lhs.type ])
66
- (using c : Candidate [L ])
67
- (using check : c.OutW =:= c.OutW )
68
- : DFVal [c.OutW , c.OutP | RP ] = ???
59
+ def ^^^ [R ](rhs : Option [R ])
60
+ (using es : Sub [lhs.type , L ])
61
+ (using c : Candidate [L ])
62
+ (using check : c.OutP =:= c.OutP ): Option [c.OutP | R ] = ???
69
63
70
- val x : DFVal [ 8 , true ] = ???
64
+ val x : Option [ true ] = ???
71
65
val z1 = x ^^^ x // Ok
72
66
val z2 = z1 ^^^ x // Ok
73
67
val zzz = x ^^^ x ^^^ x // Error before changes
0 commit comments