summaryrefslogtreecommitdiff
path: root/test/files/pos
diff options
context:
space:
mode:
authorPaul Phillips <paulp@improving.org>2011-06-19 21:43:53 +0000
committerPaul Phillips <paulp@improving.org>2011-06-19 21:43:53 +0000
commit87b1b727692fca063882dd81fcfb219e955aa1a8 (patch)
treea46487ba40998e13690758bc9e3fa9dc0698b162 /test/files/pos
parent3299ee0046fd920c3c6bfc386c73685059ba13ba (diff)
downloadscala-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/files/pos')
-rw-r--r--test/files/pos/bug3343.scala15
-rw-r--r--test/files/pos/bug4018.scala15
-rw-r--r--test/files/pos/hk-infer.scala34
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
+}
+