File tree Expand file tree Collapse file tree 2 files changed +37
-0
lines changed
compiler/src/dotty/tools/dotc/typer Expand file tree Collapse file tree 2 files changed +37
-0
lines changed Original file line number Diff line number Diff line change @@ -844,6 +844,10 @@ trait ImplicitRunInfo:
844
844
case t : TypeVar => apply(t.underlying)
845
845
case t : ParamRef => applyToUnderlying(t)
846
846
case t : ConstantType => apply(t.underlying)
847
+ case t @ AppliedType (tycon, args) if ! tycon.typeSymbol.isClass =>
848
+ // To prevent arguments to be reduced away when re-applying the tycon bounds,
849
+ // we collect all parts as elements of a tuple. See i21951.scala for a test case.
850
+ apply(defn.tupleType(tycon :: args))
847
851
case t => mapOver(t)
848
852
end liftToAnchors
849
853
val liftedTp = liftToAnchors(tp)
Original file line number Diff line number Diff line change
1
+ class A
2
+ object A :
3
+ given g [F [_]]: F [A ] = ???
4
+
5
+ object Test :
6
+ summon[List [A ]] // ok
7
+ def foo [F [_]] =
8
+ summon[F [A ]] // error
9
+
10
+ final case class X (val i : Int )
11
+ object X {
12
+ implicit final class XOps [F [_]](xs : F [X ]) {
13
+ def unpack (implicit ev : F [X ] <:< Iterable [X ]): Iterable [Int ] = xs.map(_.i)
14
+ }
15
+ }
16
+
17
+ object App extends App {
18
+ // good
19
+ val ys : List [X ] = List (X (1 ))
20
+ println(ys.unpack)
21
+
22
+ // bad
23
+ def printPolymorphic [F [_]](xs : F [X ])(implicit ev : F [X ] <:< Iterable [X ]) = {
24
+ locally {
25
+ // implicit XOps is correct
26
+ import X .XOps
27
+ println(xs.unpack) // found
28
+ }
29
+ // but it's not being searched for in the companion object of X
30
+ println(xs.unpack) // error: unpack is not a member of F[X]
31
+ }
32
+ printPolymorphic[List ](ys)
33
+ }
You can’t perform that action at this time.
0 commit comments