aboutsummaryrefslogtreecommitdiff
path: root/tests/pos/t1513a.scala
diff options
context:
space:
mode:
authorOlivier Blanvillain <olivier.blanvillain@gmail.com>2016-09-15 16:59:40 +0200
committerOlivier Blanvillain <olivier.blanvillain@gmail.com>2016-09-15 17:03:09 +0200
commit5450507c663bca565b2b61b8afb1073c991c9827 (patch)
tree034fa122e9ef517626a5b54e3a9f954a08bd9a97 /tests/pos/t1513a.scala
parent3f3df3d8f7638eb5cca9ae8162f8388373c912c6 (diff)
downloaddotty-5450507c663bca565b2b61b8afb1073c991c9827.tar.gz
dotty-5450507c663bca565b2b61b8afb1073c991c9827.tar.bz2
dotty-5450507c663bca565b2b61b8afb1073c991c9827.zip
Fix #1513: misaligned by name type parameter type bounds
Diffstat (limited to 'tests/pos/t1513a.scala')
-rw-r--r--tests/pos/t1513a.scala36
1 files changed, 36 insertions, 0 deletions
diff --git a/tests/pos/t1513a.scala b/tests/pos/t1513a.scala
new file mode 100644
index 000000000..3c4c02376
--- /dev/null
+++ b/tests/pos/t1513a.scala
@@ -0,0 +1,36 @@
+object Test {
+ // Heterogeneous lists and natural numbers as defined in shapeless.
+
+ sealed trait HList
+ sealed trait ::[H, T <: HList] extends HList
+ sealed trait HNil extends HList
+
+ sealed trait Nat
+ sealed trait Succ[P <: Nat] extends Nat
+ sealed trait Zero extends Nat
+
+ // Accessor type class to compute the N'th element of an HList L.
+
+ trait Accessor[L <: HList, N <: Nat] { type Out }
+ object Accessor {
+ type Aux[L <: HList, N <: Nat, O] = Accessor[L, N] { type Out = O }
+
+ // (H :: T).At[Zero] = H
+ implicit def caseZero[H, T <: HList]: Aux[H :: T, Zero, H] = ???
+
+ // T.At[N] = O => (H :: T).At[Succ[N]] = O
+ implicit def caseN[H, T <: HList, N <: Nat, O]
+ (implicit a: Aux[T, N, O]): Aux[H :: T, Succ[N], O] = ???
+ }
+
+ case class Proxy[T]()
+
+ def at1[NN <: Nat, OO] (implicit e: Accessor.Aux[String :: HNil, NN, OO]): OO = ???
+ def at2[NN <: Nat, OO](p: Proxy[NN])(implicit e: Accessor.Aux[String :: HNil, NN, OO]): OO = ???
+
+ // N is fixed by a value
+ at2(Proxy[Zero]): String
+
+ // N is fixed as a type parameter (by name)
+ at1[NN = Zero]: String
+}