summaryrefslogtreecommitdiffstats
path: root/Scala
diff options
context:
space:
mode:
Diffstat (limited to 'Scala')
-rw-r--r--Scala/sandbox/0-main.scala1
-rw-r--r--Scala/sandbox/7-variance.scala25
2 files changed, 26 insertions, 0 deletions
diff --git a/Scala/sandbox/0-main.scala b/Scala/sandbox/0-main.scala
index 99ee4ba..6f0edf3 100644
--- a/Scala/sandbox/0-main.scala
+++ b/Scala/sandbox/0-main.scala
@@ -9,5 +9,6 @@ object Main extends App {
IntSet.run
IntList.run
Natural.run
+ Variance.run
}
diff --git a/Scala/sandbox/7-variance.scala b/Scala/sandbox/7-variance.scala
new file mode 100644
index 0000000..49f0373
--- /dev/null
+++ b/Scala/sandbox/7-variance.scala
@@ -0,0 +1,25 @@
+object Variance
+{
+ // to allow
+ trait List[+T] {
+ def isEmpty: Boolean
+ def head: T
+ def tail: List[T]
+ }
+
+ class Cons[T](val head: T, val tail: List[T]) extends List[T] {
+ def isEmpty = false
+ }
+
+ // extends List[Nothing] so that it can hold anything
+ object Nil extends List[Nothing] {
+ def isEmpty = true
+ def head: Nothing = throw new NoSuchElementException("Nil.head")
+ def tail: Nothing = throw new NoSuchElementException("Nil.tail")
+ }
+
+ def run = {
+ println("Variance")
+ val x: List[String] = Nil
+ }
+}