¿Cómo puedo evitar el borrado de tipos en Scala? O, ¿por qué no puedo obtener el parámetro de tipo de mis colecciones?

Es un triste hecho de la vida en Scala que si crea una instancia de una Lista [Int], puede verificar que su instancia es una Lista, y puede verificar que cualquier elemento individual de ella sea un Int, pero no que sea una Lista [ Int], como se puede verificar fácilmente:

scala> List(1,2,3) match {
     | case l : List[String] => println("A list of strings?!")
     | case _ => println("Ok")
     | }
warning: there were unchecked warnings; re-run with -unchecked for details
A list of strings?!

La opción "Checkecked" pone la culpa directamente en el borrado de tipos:

scala>  List(1,2,3) match {
     |  case l : List[String] => println("A list of strings?!")
     |  case _ => println("Ok")
     |  }
<console>:6: warning: non variable type-argument String in type pattern is unchecked since it is eliminated by erasure
        case l : List[String] => println("A list of strings?!")
                 ^
A list of strings?!

¿Por qué es eso, y cómo me las arreglo?

Respuestas a la pregunta(11)

Su respuesta a la pregunta