diff options
author | Paul Phillips <paulp@improving.org> | 2011-06-19 21:43:53 +0000 |
---|---|---|
committer | Paul Phillips <paulp@improving.org> | 2011-06-19 21:43:53 +0000 |
commit | 87b1b727692fca063882dd81fcfb219e955aa1a8 (patch) | |
tree | a46487ba40998e13690758bc9e3fa9dc0698b162 /test | |
parent | 3299ee0046fd920c3c6bfc386c73685059ba13ba (diff) | |
download | scala-87b1b727692fca063882dd81fcfb219e955aa1a8.tar.gz scala-87b1b727692fca063882dd81fcfb219e955aa1a8.tar.bz2 scala-87b1b727692fca063882dd81fcfb219e955aa1a8.zip |
Fixed an issue with higher kinded type inferenc...
Fixed an issue with higher kinded type inference on constructors without
any help from adriaan. Provisionally notched belt. Wrapped up as many
tickets as I added characters of code. Closes SI-3343, SI-4018. Review
by moors.
Diffstat (limited to 'test')
-rw-r--r-- | test/files/pos/bug3343.scala | 15 | ||||
-rw-r--r-- | test/files/pos/bug4018.scala | 15 | ||||
-rw-r--r-- | test/files/pos/hk-infer.scala | 34 |
3 files changed, 64 insertions, 0 deletions
diff --git a/test/files/pos/bug3343.scala b/test/files/pos/bug3343.scala new file mode 100644 index 0000000000..6c34cdff00 --- /dev/null +++ b/test/files/pos/bug3343.scala @@ -0,0 +1,15 @@ +import scala.collection.mutable.{ Builder, ListBuffer } + +object Test { + class Converter[T] + object SimpleIntConverter extends Converter[Int] + + class TraversableConverter[T, Coll[X] <: Traversable[X]](converter: Converter[T], builder: Builder[T, Coll[T]]) extends Converter[Coll[T]] { + def convert(x: T): List[T] = List(x) + } + val tc: Converter[List[Int]] = new TraversableConverter(SimpleIntConverter, new ListBuffer[Int]) + val tc2 = new TraversableConverter(SimpleIntConverter, new ListBuffer[Int]) + + def main(args: Array[String]): Unit = { + } +}
\ No newline at end of file diff --git a/test/files/pos/bug4018.scala b/test/files/pos/bug4018.scala new file mode 100644 index 0000000000..2b265c5717 --- /dev/null +++ b/test/files/pos/bug4018.scala @@ -0,0 +1,15 @@ +trait M[V[_]] + +class Cls[V[_]](c: M[V]) + +object Cls{ + def apply[V[_]](c: M[V]): Cls[V] = new Cls[V](c) +} + +object test { + val c: M[Option] = new M[Option] {} + new Cls(c) // does not infer. + new Cls[Option](c) // okay + Cls(c) // okay +} + diff --git a/test/files/pos/hk-infer.scala b/test/files/pos/hk-infer.scala new file mode 100644 index 0000000000..a1b83bf04a --- /dev/null +++ b/test/files/pos/hk-infer.scala @@ -0,0 +1,34 @@ +object Basis { + final case class X[T](t: T) + val x = Seq(X(32)) + val y = Seq(X(true)) + val x1 = Seq(X("asdf")) + val x2 = Seq(X('d')) +} +import Basis._ + +object DoesWork { + def f2 = List(x, y, x1, x2).flatten +} + +// Testing the not giving of explicit Booper[M] arguments. +object ShouldWorkHK { + class Booper[M[_]](xs: Seq[M[_]]) extends collection.generic.SeqForwarder[M[_]] { + def underlying = xs + def BOOP(ys: Seq[M[_]]) = new Booper(xs ++ ys) + } + implicit def mkBoop[M[_]](xs: Seq[M[_]]) = new Booper(xs) + + def f1 = x BOOP y BOOP x1 BOOP x2 +} + +object DoesWorkHK { + class Booper[M[_]](xs: Seq[M[_]]) extends collection.generic.SeqForwarder[M[_]] { + def underlying = xs + def BOOP(ys: Seq[M[_]]) = new Booper[M](xs ++ ys) + } + implicit def mkBoop[M[_]](xs: Seq[M[_]]) = new Booper[M](xs) + + def f1 = x BOOP y BOOP x1 BOOP x2 +} + |