Transmitir uma variável ao tipo de tempo de execução do TypeCast existencial digitado no Scala

Esta discussão abordado como usarTypeTag para obter o tipo de tempo de execução dos parâmetros de tipo quando usado comExistential tipo.Outra discussão abordou como converter uma variável em seu tipo de tempo de execução recuperado deTypeTag.

Minha pergunta baseia-se nos tópicos acima mencionados (uma espécie de combinação dos dois cenários). Partes do código são duplicadas dos dois threads para maior clareza.

scala> import scala.reflect.runtime.universe._
import scala.reflect.runtime.universe._

scala> def cast[A](a: Any, tt: TypeTag[A]): A = a.asInstanceOf[A]
cast: [A](a: Any, tt: reflect.runtime.universe.TypeTag[A])A

scala> abstract class Animal[T](implicit tt: TypeTag[T]) {
     |   val ttag = tt
     | }
defined class Animal

scala> case object Dog extends Animal[Int]
defined object Dog

scala> case object Cat extends Animal[String]
defined object Cat

scala> val aa: List[(Animal[_], Any)] = List((Dog, 5), (Cat, "stringgg"), (Dog, 2))                                                                                                               
aa: List[(Animal[_], Any)] = List((Dog,5), (Cat,stringgg), (Dog,2))

scala> aa(0)._1.ttag
res25: reflect.runtime.universe.TypeTag[_] = TypeTag[Int]

scala> aa(1)._1.ttag
res26: reflect.runtime.universe.TypeTag[_] = TypeTag[String]

scala> cast(aa(0)._2, aa(0)._1.ttag)
res27: Any = 5

scala> cast(aa(1)._2, aa(1)._1.ttag)
res28: Any = stringgg

Em resumo, as duas últimas linhas:cast(value, TypeTag[_]) sempre retorne um valor do tipoAny. Mas minha intenção é converter esses valores no tipo correto armazenado emDog|Cat.ttag, que infelizmente não éTypeTag[Int] ouTypeTag[String] masTypeTag[_] devido ao uso deexistential tipo. Existe alguma solução para isso?

Editar 1:

Apesar do campottag é do tipoTypeTag[_], ttag.tpe tem o "tipo" certo (mas como uma instância dereflect.runtime.universe.Type) É possível usar otypetag.tpe transmitir para o tipo certo?

questionAnswers(1)

yourAnswerToTheQuestion