Я пытаюсь построить интерпретатор для моего ADT, но я не знаю, как решить проблему загрузки неявных манифестов хорошим способомКак загрузить неявный манифест из полиморфного поля типа
sealed trait Polymorphic[T]
case class Type1[T: Manifest](field1: T) extends Polymorphic[T]
case class Type2[T: Manifest, V: Manifest](field1: T, field2:V) extends Polymorphic[T] {
def vManifest: Manifest[V] = manifest[V]
}
object Interpreter {
def eval[T: Manifest](polymorphic: Polymorphic[T]): T = {
polymorphic match {
case Type1(field) =>
???
case value: Type2[T, _] =>
implicit val vManifest = value.vManifest
evalType2(value)
}
}
def evalType2[T:Manifest, V:Manifest](type2: Type2[T,V]): T = ???
}
Этих было лучшим решением, которое я мог бы создать, но мне не нравится, что мне пришлось создать эту функцию vManifest, чтобы иметь возможность загружать манифест в eval.
Есть ли лучший способ сделать это?
Спасибо, это сработает, но мне нужно будет неявно объявить манифест в контексте снова, есть ли способ избежать этого? – Mikel
'import value.vManifest' будет делать то же самое. –