aboutsummaryrefslogtreecommitdiff
path: root/tests/untried/pos/lub-dealias-widen.scala
diff options
context:
space:
mode:
Diffstat (limited to 'tests/untried/pos/lub-dealias-widen.scala')
-rw-r--r--tests/untried/pos/lub-dealias-widen.scala34
1 files changed, 34 insertions, 0 deletions
diff --git a/tests/untried/pos/lub-dealias-widen.scala b/tests/untried/pos/lub-dealias-widen.scala
new file mode 100644
index 000000000..d09a3abf8
--- /dev/null
+++ b/tests/untried/pos/lub-dealias-widen.scala
@@ -0,0 +1,34 @@
+import scala.language.higherKinds
+
+sealed trait Path {
+ type EncodeFunc
+ type Route[R] = List[String] => R
+
+ def >>(f: Route[Int]): Sitelet[EncodeFunc] = ???
+}
+
+case object PAny extends Path {
+ type EncodeFunc = List[String] => String
+}
+
+case class PLit[Next <: Path]() extends Path {
+ type EncodeFunc = Next#EncodeFunc
+}
+
+trait Sitelet[EncodeFunc] { self =>
+ def &[G <: H, H >: EncodeFunc](that: Sitelet[G]): Sitelet[H] = ???
+}
+
+object Test {
+ val r: Sitelet[Int => (Int => String)] = ???
+
+ val p2: PLit[PAny.type] = ???
+ val r2 /*: Sitelet[List[String] => String] */ // annotate type and it compiles with 2.10.0
+ = p2 >> { (xs: List[String]) => 0 }
+
+ // This works after https://github.com/scala/scala/commit/a06d31f6a
+ // Before: error: inferred type arguments [List[String] => String,List[String] => String]
+ // do not conform to method &'s type parameter bounds
+ // [G <: H,H >: Int => (Int => String)]
+ val s = r & r2
+}