diff options
Diffstat (limited to 'tests/untried/neg-with-implicits/t7289_status_quo.scala')
-rw-r--r-- | tests/untried/neg-with-implicits/t7289_status_quo.scala | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/tests/untried/neg-with-implicits/t7289_status_quo.scala b/tests/untried/neg-with-implicits/t7289_status_quo.scala new file mode 100644 index 000000000..e1f9a9f8a --- /dev/null +++ b/tests/untried/neg-with-implicits/t7289_status_quo.scala @@ -0,0 +1,23 @@ +// record the status quo after this fix +// not clear to @adriaanm why an upper-bounded existential in an invariant position +// is different from putting that upper bound in a covariant position +object Test1 { + trait Ext[T] + implicit def f[A, Coll <: CC[A], CC[X] <: Traversable[X]](implicit xi: Ext[A]): Ext[Coll] = ??? + implicit val m: Ext[List[List[Int]]] = new Ext[List[List[Int]]]{} + + implicitly[Ext[List[Int]]] // fails - not found + implicitly[Ext[List[List[Int]]]] // compiles + implicitly[Ext[List[List[List[Int]]]]] // fails - not found + + // Making Ext[+T] should incur the same behavior as these. (so says @paulp) + implicitly[Ext[_ <: List[Int]]] // compiles + implicitly[Ext[_ <: List[List[Int]]]] // fails - ambiguous + implicitly[Ext[_ <: List[List[List[Int]]]]] // compiles + + // But, we currently get: + trait ExtCov[+T] + implicitly[ExtCov[List[Int]]] // fails - not found + implicitly[ExtCov[List[List[Int]]]] // fails - not found + implicitly[ExtCov[List[List[List[Int]]]]] // fails - not found +} |