diff options
author | Martin Odersky <odersky@gmail.com> | 2004-04-08 13:30:51 +0000 |
---|---|---|
committer | Martin Odersky <odersky@gmail.com> | 2004-04-08 13:30:51 +0000 |
commit | 64d2fb73cd89afbb1df3976dda189ad0cc8a8d0a (patch) | |
tree | aedbdec5288485e153e53c6df64588da2c93675b /test/files/pos/viewtest1.scala | |
parent | 98a03600e089ca46db9fe74cd3a0295a44148fff (diff) | |
download | scala-64d2fb73cd89afbb1df3976dda189ad0cc8a8d0a.tar.gz scala-64d2fb73cd89afbb1df3976dda189ad0cc8a8d0a.tar.bz2 scala-64d2fb73cd89afbb1df3976dda189ad0cc8a8d0a.zip |
*** empty log message ***
Diffstat (limited to 'test/files/pos/viewtest1.scala')
-rwxr-xr-x | test/files/pos/viewtest1.scala | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/test/files/pos/viewtest1.scala b/test/files/pos/viewtest1.scala new file mode 100755 index 0000000000..e908e2acb9 --- /dev/null +++ b/test/files/pos/viewtest1.scala @@ -0,0 +1,41 @@ +package test; + +trait Ordered[a] { + def < (x: a): boolean; +} + +object O { + def view (x: String): Ordered[String] = new Ordered[String] { + def < (y: String) = x.compareTo(y) < 0; + } +} + +object Empty extends Tree[All]; +case class Node[+c <% Ordered[c]](elem: c, l: Tree[c], r: Tree[c]) extends Tree[c]; + +trait Tree[+a <% Ordered[a]] { + def insert[b >: a <% Ordered[b]](x: b): Tree[b] = this match { + case Empty => new Node(x, Empty, Empty) + case Node(elem, l, r) => + if (x == elem) this + else if (x < elem) Node(elem, l insert x, r) + else Node(elem, l, r insert x); + } + def elements: List[a] = this match { + case Empty => List() + case Node(elem, l, r) => + l.elements ::: List(elem) ::: r.elements + } +} + +object Test { + import O.view; + + def main(args: Array[String]) = { + var t: Tree[String] = Empty; + for (val s <- args) { + t = t insert s + } + System.out.println(t.elements) + } +} |