Манифест устарел - вместо этого используйте ClassTag/TypeTag. Вы на самом деле не нужно, чтобы захватить ClassTag/TypeTag внутри вашей функции - вы можете сделать это в вашем классе (это единственный путь, потому что только класс может захватить его абстрактный тип во время выполнения):
trait MV{type A; implicit val t: TypeTag[A]}
class MVString(implicit val t: TypeTag[String]) extends MV {type A = String}
После этого - вы может получить доступ к TypeTag в качестве члена (new MVString).t
- даже внутри вашей функции. Единственная проблема заключается в том, что вы должны явно указывать typeTag для каждой реализации. Возможное решение - использовать дженерики в сочетании с абстрактными типами:
abstract class MV[T](implicit val t: TypeTag[T]){type A = T}
class MVString extends MV[String]
scala> def readGenSingle4[C <: MV[T], T](a: C, b: C#A) = a.t
readGenSingle4: [C <: MV[T], T](a: C, b: T)reflect.runtime.universe.TypeTag[T]
scala> readGenSingle4(new MVString, "aaaa")
res4: reflect.runtime.universe.TypeTag[String] = TypeTag[String]