Não é possível substituir um tipo com limite superior não volátil


Eu tenho um erro de compilador em scala e não sei a que se refere:
Assuma estas declarações:

trait Abstract {
  type MyType
}
trait AInner
trait A extends Abstract{
  type MyType <: AInner
}
trait BInner {
  def bMethod : Int
}
trait B extends Abstract with A{
  override type MyType <: BInner with A#MyType
}
O que estou tentando alcançar aqui (em traçoB) é restringir ainda mais o tipoMyType declarado emAbstract, então qualquer valor do tipoMyType deve estender todo oMyTypes na árvore mixin.

O compilador está me dando essa mensagem (como no título):tipo MyType é um tipo volátil; não pode anular um tipo com limite superior não volátil. Eu entendi aquilotipo volatilidade está acontecendo aqui por causa da conjunção tipowith A#MyType, a parte do erro:digite com limite superior não volátil provavelmente se refere à declaração de tipotype MyType <: AInner, OndeAInner não é um tipo abstrato, portanto, não volátil.

Por que não posso fazer isso? Existe uma maneira de alcançar meu objetivo?

questionAnswers(3)

yourAnswerToTheQuestion