Mezcla de rasgos genéricos en clases parametrizadas sin duplicar parámetros de tipo
Supongamos que quiero crear un rasgo que pueda mezclar en cualquier Traversable [T]. Al final, quiero poder decir cosas como:
val m = Map("name" -> "foo") with MoreFilterOperations
y tenga métodos en MoreFilterOperations que se expresen en todo lo que Traversable tiene para ofrecer, como:
def filterFirstTwo(f: (T) => Boolean) = filter(f) take 2
Sin embargo, el problema es claramente que T no está definido como un parámetro de tipo en MoreFilterOperations. Una vez que haga eso, es factible, por supuesto, pero luego mi código leería:
val m = Map("name" -> "foo") with MoreFilterOperations[(String,String)]
o si defino una variable de este tipo:
var m2: Map[String,String] with MoreFilterOperations[(String,String)] = ...
cual esway to verbose para mi gusto. Me gustaría tener el rasgo definido de tal manera que pudiera escribir el último como:
var m2: Map[String,String] with MoreFilterOperations
Traté de auto escribir, miembros de tipo abstracto, pero no ha resultado en nada útil. ¿Alguna pista