summaryrefslogtreecommitdiff
path: root/test/files/pos/t8237.scala
blob: 005089079e8b86d2e4f5fe4fd1b64631547e39ae (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
import scala.language.higherKinds

object TestExplicit {
  trait TC[A]
  def fTt[A,E[X] <: List[X]](a: A)(implicit tt: TC[E[A]]) = a
  implicit def tc[T]: TC[T] = ???

  // Typechecking results in SOE in TypeVar.isGround
  fTt(1)(tc)
  // fun = TestExplicit.this.fTt[Int, E](1)
  // args = TestExplicit.this.tc[E[Int]]
  // argTpes.head.instantiateTypeParams = TC[?E#1[Int]]
  // formals.head.instantiateTypeParams = TC[?E#2[Int]]
  //   (where ?E#1 and ?E#2 as distinct AppliedTypeVars that resulted
  //    from separate applications of type args to the same HKTypeVar, ?E)
  //
  // As we check if the argument conforms to the formal, we would have
  // AppliedTypeVars sharing the same TypeConstraints on the LHS and RHS,
  // which leads to a cyclic constraint.
}

object TestImplicit    {
  trait TC[A]
  def fTt[A,E[X] <: List[X]](a: A)(implicit tt: TC[E[A]]) = a
  implicit def tc[T]: TC[T] = ???

  // Oddly enough, this one works.
  fTt(1)
}