I'm having some trouble implementing an immutable BST in Scala. The problem seems to be that by some reason although I've defined K
to be as Ordered[K]
(2nd line), it actually is being considered by the Scala compiler to be an Any
. Why?
abstract class BST
sealed case class Node[K <: Ordered[K], V](key : K, value : V, left : BST, right : BST) extends BST
sealed case class Empty() extends BST
object BST {
def empty = Empty()
def add[K <: Ordered[K], V](key : K, value : V, tree : BST) : BST = tree match {
case Empty() => new Node(key, value, Empty(), Empty())
case Node(nodeKey, nodeValue, left, right) =>
if (key < nodeKey) new Node(nodeKey, nodeValue, add(key, value, left), right)
else if (key > nodeKey) new Node(nodeKey, nodeValue, left, add(key, value, right))
else new Node(key, value, left, right)
}