summaryrefslogtreecommitdiff
path: root/test/pending/pos/existentials-harmful.scala
diff options
context:
space:
mode:
Diffstat (limited to 'test/pending/pos/existentials-harmful.scala')
-rw-r--r--test/pending/pos/existentials-harmful.scala54
1 files changed, 0 insertions, 54 deletions
diff --git a/test/pending/pos/existentials-harmful.scala b/test/pending/pos/existentials-harmful.scala
deleted file mode 100644
index 8722852e8a..0000000000
--- a/test/pending/pos/existentials-harmful.scala
+++ /dev/null
@@ -1,54 +0,0 @@
-// a.scala
-// Mon Jul 11 14:18:26 PDT 2011
-
-object ExistentialsConsideredHarmful {
- class Animal(val name: String)
- object Dog extends Animal("Dog")
- object Sheep extends Animal("Sheep")
-
- trait Tools[A] {
- def shave(a: A): A
- }
- def tools[A](a: A): Tools[A] = null // dummy
-
- case class TransportBox[A <: Animal](animal: A, tools: Tools[A]) {
- def label: String = animal.name
- }
-
- // 1.
- def carry[A <: Animal](box: TransportBox[A]): Unit = {
- println(box.animal.name+" got carried away")
- }
-
- val aBox =
- if (math.random < 0.5)
- TransportBox(Dog, tools(Dog))
- else
- TransportBox(Sheep, tools(Sheep))
-
- // 2.
- //aBox.tools.shave(aBox.animal)
-
- // Use pattern match to avoid opening the existential twice
- aBox match {
- case TransportBox(animal, tools) => tools.shave(animal)
- }
-
- abstract class BoxCarrier[R <: Animal](box: TransportBox[R]) {
- def speed: Int
-
- def talkToAnimal: Unit = println("The carrier says hello to"+box.animal.name)
- }
-
- // 3.
- //val bc = new BoxCarrier(aBox) {
-
- // Use pattern match to avoid opening the existential twice
- // Type annotation on bc is required ... possible compiler bug?
- // val bc : BoxCarrier[_ <: Animal] = aBox match {
- val bc = aBox match {
- case tb : TransportBox[a] => new BoxCarrier(tb) {
- def speed: Int = 12
- }
- }
-}