À l'aide de cas générique classes Scala

Je me demande si l'utilisation de génériques pour Scala classes de cas pouvez enregistrer un peu de code réutilisable.

Sauvons j'ai la classe suivante hiérarchie pour émuler une "variante" type de boîtes d'un ensemble de types et permet unboxing eux à l'aide de la correspondance de motif:

sealed abstract class Box;

case class DoubleBox(v: Double) extends Box;
case class StringBox(v: String) extends Box;
case class BooleanBox(v: Boolean) extends Box;

def typeName(b: Box) = b match {
  case DoubleBox(v) => "Double"
  case StringBox(v) => "String"
  case BooleanBox(v) => "Boolean"
  case _ => "Unknown"
}

Il peut y avoir des endroits dans le code, là où il serait plus pratique de travailler avec la feuille de cas des classes si elles étaient des génériques. Quelque chose comme:

sealed abstract class Box;

case class TypedBox[T](v: T) extends Box;

def typeName2(b: Box) = b match {
  case TypedBox[Double](v) => "Double"
  case TypedBox[String](v) => "String"
  case TypedBox[Boolean](v) => "Boolean"
  case _ => "Unknown"
}

Mais cela ne veut pas compiler. Autant je comprends cette syntaxe n'est pas vraiment reconnu comme valide Scala de syntaxe.

Est-il possible de faire ce que je veux de travail ou c'est une mauvaise idée et je n'arrive pas à obtenir quelque chose?

EDIT: Vinicius répondu à ma question, mais en regardant la réponse j'ai une autre question. Est-il possible de faire allusion le compilateur en quelque sorte que seuls certains liste des types peuvent être utilisés à des paramètres TypedBox? Je veux que, pour s'assurer que le compilateur peut toujours faire vérifier l'exhaustivité de TypedBox de l'utilisation/de correspondance.

OriginalL'auteur Alexey Alexandrov | 2013-09-17