File: t8237.scala

package info (click to toggle)
scala 2.11.12-6
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 62,924 kB
  • sloc: javascript: 28,808; java: 13,415; xml: 3,135; sh: 1,620; python: 756; makefile: 38; awk: 36; ansic: 6
file content (29 lines) | stat: -rw-r--r-- 952 bytes parent folder | download | duplicates (4)
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)
}