Estoy tratando de definir un tipo estructural que define cualquier colección que tenga un método "agregar" (por ejemplo, una colección java). El uso de este, quiero definir un par de funciones de orden superior que operan en una determinada colecciónUso de tipos estructurales Scala con tipos abstractos
object GenericTypes {
type GenericCollection[T] = { def add(value: T): java.lang.Boolean}
}
import GenericTypes._
trait HigherOrderFunctions[T, CollectionType[X] <: GenericCollection[X]] {
def map[V](fn: (T) => V): CollectionType[V]
....
}
class RichJList[T](list: List[T]) extends HigherOrderFunctions[T, java.util.List]
Esto no se compila con el siguiente error
error: Parameter type in structural refinement may not refer to abstract type defined outside that same refinement
intenté quitar el parámetro de GenericCollection y poniéndolo en el método:
object GenericTypes {
type GenericCollection = { def add[T](value: T): java.lang.Boolean}
}
import GenericTypes._
trait HigherOrderFunctions[T, CollectionType[X] <: GenericCollection]
class RichJList[T](list: List[T]) extends HigherOrderFunctions[T, java.util.List]
pero me sale otro error:
error: type arguments [T,java.util.List] do not conform to trait HigherOrderFunctions's type parameter bounds [T,CollectionType[X] <: org.scala_tools.javautils.j2s.GenericTypes.GenericCollection]
¿Alguien me puede dar algunos consejos sobre cómo usar el tipado estructural con parámetros abstractos en Scala? ¿O cómo lograr lo que estoy buscando lograr? ¡Muchas gracias!