diff options
author | Jason Zaugg <jzaugg@gmail.com> | 2013-05-27 10:15:21 +0200 |
---|---|---|
committer | Jason Zaugg <jzaugg@gmail.com> | 2013-05-27 10:15:21 +0200 |
commit | bae4196b74981927c3d52dff9a4b0c3789baf733 (patch) | |
tree | bd1566a19ae64d3a92cec2878b757578e8c8c48f | |
parent | 7691423341db9fa84dc5a3a31b9efd22bafe1e27 (diff) | |
download | scala-bae4196b74981927c3d52dff9a4b0c3789baf733.tar.gz scala-bae4196b74981927c3d52dff9a4b0c3789baf733.tar.bz2 scala-bae4196b74981927c3d52dff9a4b0c3789baf733.zip |
A test case for a recent LUB progression.
A test distilled from a Lift example that compiles correctly
under 2.10.1, but not under 2.10.0.
I pinpointed the progression to:
https://github.com/scala/scala/commit/a06d31f6#L0R6611
Chalk up another win for `dealiasWiden`.
-rw-r--r-- | test/files/pos/lub-dealias-widen.scala | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/test/files/pos/lub-dealias-widen.scala b/test/files/pos/lub-dealias-widen.scala new file mode 100644 index 0000000000..38854fbc5c --- /dev/null +++ b/test/files/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 +}
\ No newline at end of file |