blob: 1de693d137fe7972e960086f82415949172ac376 (
plain) (
tree)
|
|
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]]
}
|