diff options
author | Martin Odersky <odersky@gmail.com> | 2015-12-20 22:00:29 +0100 |
---|---|---|
committer | Martin Odersky <odersky@gmail.com> | 2015-12-20 22:00:45 +0100 |
commit | e51b8845fb20fe3a4e1c655d4b72e2833906bbc2 (patch) | |
tree | 91bc16867d7a709566d8be80902b3256294cf338 /tests/invalid/pos/typesafecons.scala | |
parent | 581fee04f808d6f7759f98358e7475e6a58138e3 (diff) | |
download | dotty-e51b8845fb20fe3a4e1c655d4b72e2833906bbc2.tar.gz dotty-e51b8845fb20fe3a4e1c655d4b72e2833906bbc2.tar.bz2 dotty-e51b8845fb20fe3a4e1c655d4b72e2833906bbc2.zip |
The big pending/pos test triage
Diffstat (limited to 'tests/invalid/pos/typesafecons.scala')
-rw-r--r-- | tests/invalid/pos/typesafecons.scala | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/tests/invalid/pos/typesafecons.scala b/tests/invalid/pos/typesafecons.scala new file mode 100644 index 000000000..524328016 --- /dev/null +++ b/tests/invalid/pos/typesafecons.scala @@ -0,0 +1,30 @@ +object Pair { + sealed trait Pair { + type First + type Second <: Pair + } + + class End extends Pair { + type First = Nothing + type Second = End + + def ::[T](v : T) : Cons[T, End] = Cons(v, this) + } + + case object End extends End + + final case class Cons[T1, T2 <: Pair](_1 : T1, _2 : T2) extends Pair { + type First = T1 + type Second = T2 + + def ::[T](v : T) : Cons[T, Cons[T1, T2]] = Cons(v, this) + def find[T](implicit finder : Cons[T1, T2] => T) = finder(this) + } + + implicit def findFirst[T1, T2 <: Pair] : Cons[T1, T2] => T1 = (p : Cons[T1, T2]) => p._1 + implicit def findSecond[T, T1, T2 <: Pair](implicit finder : T2 => T) : Cons[T1, T2] => T = (p : Cons[T1, T2]) => finder(p._2) + + val p : Cons[Int, Cons[Boolean, End]] = 10 :: false :: End +// val x : Boolean = p.find[Boolean](findSecond(findFirst)) + val x2 : Boolean = p.find[Boolean] // Doesn't compile +} |