File tree Expand file tree Collapse file tree 4 files changed +63
-3
lines changed
src/dotty/tools/dotc/core Expand file tree Collapse file tree 4 files changed +63
-3
lines changed Original file line number Diff line number Diff line change @@ -929,7 +929,10 @@ object Contexts {
929
929
// - we don't want TyperState instantiating these TypeVars
930
930
// - we don't want TypeComparer constraining these TypeVars
931
931
val poly = PolyType (DepParamName .fresh(sym.name.toTypeName) :: Nil )(
932
- pt => TypeBounds .empty :: Nil ,
932
+ pt => (sym.info match {
933
+ case tb @ TypeBounds (_, hi) if hi.isLambdaSub => tb
934
+ case _ => TypeBounds .empty
935
+ }) :: Nil ,
933
936
pt => defn.AnyType )
934
937
new TypeVar (poly.paramRefs.head, creatorState = null )
935
938
}
Original file line number Diff line number Diff line change @@ -559,7 +559,7 @@ class TypeComparer(initctx: Context) extends ConstraintHandling[AbsentContext] {
559
559
if (tparams1.nonEmpty)
560
560
return recur(
561
561
HKTypeLambda .fromParams(tparams1, tp1.appliedTo(tparams1.map(_.paramRef))),
562
- tp2)
562
+ tp2) || fourthTry
563
563
else tp2 match {
564
564
case EtaExpansion (tycon2) if tycon2.symbol.isClass =>
565
565
return recur(tp1, tycon2)
Original file line number Diff line number Diff line change @@ -23,4 +23,4 @@ i4006c.scala
23
23
24
24
# Not sure what's wring here
25
25
i4203.scala
26
- t6278-synth-def.scala
26
+ t6278-synth-def.scala
Original file line number Diff line number Diff line change
1
+ import scala .compiletime ._
2
+
3
+ object Test1 {
4
+ type Foo [F [_]]
5
+ type Bar [T ] = T match {
6
+ case Foo [f] => f[Int ]
7
+ }
8
+
9
+ val li : Bar [Foo [List ]] = List (1 , 2 , 3 )
10
+ }
11
+
12
+ object Test2 {
13
+ inline def summon [T ] = implicit match {
14
+ case t : T => t
15
+ }
16
+
17
+ class Foo [F [_]]
18
+
19
+ inline def bar [T ] = inline erasedValue[T ] match {
20
+ case _ : Foo [f] => summon[f[Int ]]
21
+ }
22
+
23
+ implicit val li : List [Int ] = List (1 , 2 , 3 )
24
+ val lii = bar[Foo [List ]]
25
+ }
26
+
27
+ object Test3 {
28
+ inline def summon [T ] = implicit match {
29
+ case t : T => t
30
+ }
31
+
32
+ type K1Top = [t] => Any
33
+
34
+ class Foo [F <: K1Top ]
35
+
36
+ inline def bar [T ] = inline erasedValue[T ] match {
37
+ case _ : Foo [f] => summon[f[Int ]]
38
+ }
39
+
40
+ implicit val li : List [Int ] = List (1 , 2 , 3 )
41
+ val lii = bar[Foo [List ]]
42
+ }
43
+
44
+ object Test4 {
45
+ inline def summon [T ] = implicit match {
46
+ case t : T => t
47
+ }
48
+
49
+ class Foo [F [t] >: List [t]]
50
+
51
+ inline def bar [T ] = inline erasedValue[T ] match {
52
+ case _ : Foo [f] => summon[f[Int ]]
53
+ }
54
+
55
+ implicit val li : List [Int ] = List (1 , 2 , 3 )
56
+ val lii = bar[Foo [List ]]
57
+ }
You can’t perform that action at this time.
0 commit comments