Definición de límites de vista implícitos en los rasgos de Scala
Estoy haciendo un ejercicio para implementar un árbol de búsqueda binario funcional en Scala, siguiendo un patrón similar que he visto usado en Haskell. Tengo una estructura que se parece a esto:
trait TreeNode[A] {
def isLeaf: Boolean
def traverse: Seq[A]
...
}
case class Branch[A](value: A, left: TreeNode[A], right: TreeNode[A]) extends TreeNode[A] {
def isLeaf: Boolean = false
def traverse: Seq[A] = ...
...
}
case class Leaf[A]() extends TreeNode[A] {
def isLeaf: Boolean = true
def traverse: Seq[A] = Seq[A]()
...
}
Carné de identidadme gusta poner una restricción de tipo enA
para que solo acepte objetos que se extiendanOrdered
. Parece que necesito definir una vista enlazada en A([A <% Ordered[A]]
) enBranch
yLeaf
, así como elTreeNode
rasgo .. no puedo hacer esto en elTreeNode
Rasgo, sin embargo, porque los límites de vista no son aceptados.
Según entiendo,<%
Los límites de visión de estilo son azúcar sintáctica para unimplicit
definición, por lo que debería haber una manera de escribir para definir el límite manualmente dentro delTreeNode
rasgo. Aunque no estoy seguro de cómo se supone que debo hacer esto. He mirado alrededor un poco, pero no he llegado mucho más lejos que la necesidad de definir algún tipo de implícito.
¿Alguien puede señalarme en la dirección correcta? ¿Me estoy acercando a esto desde el ángulo equivocado por completo?