From df50e05006b43b007c2587549030d24b5c154398 Mon Sep 17 00:00:00 2001 From: Gilles Dubochet Date: Fri, 16 Dec 2005 18:29:42 +0000 Subject: 'test-nsc' has been moved to 'test'. --- test/files/pos/viewtest1.scala | 41 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 test/files/pos/viewtest1.scala (limited to 'test/files/pos/viewtest1.scala') diff --git a/test/files/pos/viewtest1.scala b/test/files/pos/viewtest1.scala new file mode 100644 index 0000000000..0a59fdad58 --- /dev/null +++ b/test/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) + } +} -- cgit v1.2.3