File: t7785.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 (34 lines) | stat: -rw-r--r-- 878 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
30
31
32
33
34
import scala.language._

trait R[+Repr]

trait TraversableOps {
  implicit val R: R[Nothing] = ???

  // Removing the implicit parameter in both fixes the crash
  // removing it into one only gives a valid compiler error.
  trait OpsDup1[Repr] {
    def force(implicit bf: R[Repr]): Any
  }

  trait Ops[Repr] extends OpsDup1[Repr] {
    def force(implicit bf: R[Repr], dummy: DummyImplicit): Any
  }

  implicit def ct2ops[T, C[+X]](t: C[T]):
    Ops[C[T]]

  def force[T](t: Option[T]) =
    // ct2ops(t).force
    t.force //Fails compilation on 2.10.2.


  /* To get a closer look at the crash:
  :power
  val foo = typeOf[C].member(TermName("foo"))
  val pt = analyzer.HasMember(TermName("force"))
  val instantiated = foo.info.finalResultType.instantiateTypeParams(foo.typeParams, foo.typeParams.map(TypeVar(_)))
  instantiated <:< pt
  */
  def foo[T, C[+X]]: Ops[C[T]]
}