Scala: Evidência implícita para classe com parâmetro de tipo

Aqui está uma configuração simples com duas características, uma classe com um parâmetro de tipo covariante limitado pelas características anteriores e uma segunda classe com um parâmetro de tipo limitado pela outra classe. Para ambas as classes, um método específico está disponível (por evidência implícita) somente se um dos dois traços for subjacente ao parâmetro de tipo. Isso compila bem:

trait Foo
trait ReadableFoo extends Foo {def field: Int}

case class Bar[+F <: Foo](foo: F) {
  def readField(implicit evidence: F <:< ReadableFoo) = foo.field
}

case class Grill[+F <: Foo, +B <: Bar[F]](bar: B) {
  def readField(implicit evidence: F <:< ReadableFoo) = bar.readField
}

No entanto, desdeBar é covariante emF, Eu não deveria precisar doF parâmetro emGrill. Eu deveria apenas exigir queB é um subtipo deBar[ReadableFoo]. Isso, no entanto, falha:

case class Grill[+B <: Bar[_]](bar: B) {
  def readField(implicit evidence: B <:< Bar[ReadableFoo]) = bar.readField
}

com o erro:

error: Cannot prove that Any <:< this.ReadableFoo.
  def readField(implicit evidence: B <:< Bar[ReadableFoo]) = bar.readField

Por que a evidência implícita não está sendo levada em conta?

questionAnswers(3)

yourAnswerToTheQuestion