El código está comentado, así que vamos a tomar un momento para saborear que:
/** If we can absolutely rule out a match we can fail early.
* This is the case if the scrutinee has no unresolved type arguments
* and is a "final type", meaning final + invariant in all type parameters.
*/
en cuenta que ninguno no es definitivo, por ejemplo. ¿Yo se, verdad?
Si usted alguna vez de scalac -Ypatmat-depuración, el comentario aquí podría ayudar:
https://github.com/scala/scala/pull/650
La accesibilidad es casi al alcance:
https://issues.scala-lang.org/browse/SI-6146
Pero no veo cualquier promesa sobre lo que algún día podría ser advertible. Por razones de rendimiento? También se podría decir, ¿por qué debería advertir sobre un ejemplo de [Foo [_]]?
Por ahora, las secciones de especificación 8.2 - 8.4 motivan por qué la coincidencia con Foo [a] es interesante (debido a los límites que adquiere). Creo que leeré eso de nuevo. Después de un café
trait Foo[+A]
final class Fuzz[+A] extends Foo[A]
final object Fooz extends Foo[Nothing]
object Futz extends Foo[Nothing]
//error
Fooz match {
case x: List[_] => println("A")
case _ => println("B")
}
//no error
Futz match { ... }
Parece un error. Yo lo reportaría. – sschaef