Scala: неявное свидетельство для класса с параметром типа

Вот простая установка с двумя признаками: класс с ковариантным параметром типа, ограниченным предыдущими признаками, и второй класс с параметром типа, ограниченным другим классом. Для обоих классов конкретный метод доступен (посредством неявного доказательства), только если одна из двух черт лежит в основе параметра типа. Это хорошо компилируется:

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
}

Тем не менее, так какBar ковариантен вFМне не нужноF параметр вGrill, Я должен просто потребовать, чтобыB это подтипBar[ReadableFoo], Это, однако, не удается:

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

с ошибкой:

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

Почему неявные доказательства не принимаются во внимание?

Ответы на вопрос(3)

Ваш ответ на вопрос