diff options
author | Martin Odersky <odersky@gmail.com> | 2005-10-06 13:14:33 +0000 |
---|---|---|
committer | Martin Odersky <odersky@gmail.com> | 2005-10-06 13:14:33 +0000 |
commit | 25a98964b5109aa55b71a8a26886c59903193548 (patch) | |
tree | 84b8fa154b5a0a2f36accd43d8d35926f6ba8579 /test-nsc/files/pos/viewtest1.scala | |
parent | 3b81e0cbac2fe51226472949ecde4d81b0e95412 (diff) | |
download | scala-25a98964b5109aa55b71a8a26886c59903193548.tar.gz scala-25a98964b5109aa55b71a8a26886c59903193548.tar.bz2 scala-25a98964b5109aa55b71a8a26886c59903193548.zip |
*** empty log message ***
Diffstat (limited to 'test-nsc/files/pos/viewtest1.scala')
-rwxr-xr-x | test-nsc/files/pos/viewtest1.scala | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/test-nsc/files/pos/viewtest1.scala b/test-nsc/files/pos/viewtest1.scala new file mode 100755 index 0000000000..0a59fdad58 --- /dev/null +++ b/test-nsc/files/pos/viewtest1.scala @@ -0,0 +1,41 @@ +package test; + +trait Ordered[a] { + def < (x: a): boolean; +} + +object O { + implicit 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) + } +} |