>Is the compiler able to match generic types?
No.
See warning:
Welcome to Scala 2.11.8 (Java HotSpot(TM) 64-Bit Server VM, Java 1.8.0_91).
Type in expressions for evaluation. Or try :help.
scala> val s = Seq(Some(1))
s: Seq[Some[Int]] = List(Some(1))
scala> s match{
| case h: List[String] => h(0)
| case _ => 8
| }
<console>:14: warning: non-variable type argument String in type pattern List[String] (the underlying of List[String]) is unchecked since it is eliminated by erasure
case h: List[String] => h(0)
^
res0: Any = Some(1)