@@ -42,32 +42,26 @@ val zzz = x ^^^ x ^^^ x
4242
4343
4444object Minimized :
45- trait DFVal [+ T <: Int , + P ]
4645
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 {}
4948
50- trait Candidate [R ]:
51- type OutW <: Int
49+ trait Candidate [- R ]:
5250 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
5552 type OutP = P
5653
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 ] = ???
6156 def ^^^ : Unit = ???
6257
6358 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 ] = ???
6963
70- val x : DFVal [ 8 , true ] = ???
64+ val x : Option [ true ] = ???
7165 val z1 = x ^^^ x // Ok
7266 val z2 = z1 ^^^ x // Ok
7367 val zzz = x ^^^ x ^^^ x // Error before changes
0 commit comments