Scala で型安全なキャスト

以下は、Scala2.9ではだめでScala2.10限定です
*1 *2

implicit class RichAny[A](val self: A) extends AnyVal{
  def as[B <: A : Manifest]: Option[B] = self match {
    case x: B => Some(x)
    case _    => None
  }
}

ちょっとC# っぽい(?)

使い方は以下のような感じ

scala> class A                    
defined class A                   
                                  
scala> class B extends A          
defined class B                   
                                  
scala> val b: A = new B           
b: A = B@42bab86d                 
                                  
scala> b.as[B]                    
res0: Option[B] = Some(B@42bab86d)

もうちょっと工夫のやりようがありそうなので、なにか思いついたらだれか教えて下さい。
(

*1:単にvalue classやimplicit classが問題ではなく、Manifest渡して、その型をそのまま使ってのパターンマッチが2.9では無理

*2: manifestのerasure呼べば、2.9以前でもほぼ同じことはできますが http://stackoverflow.com/a/10323892/605582