У меня возникла проблема с разрешением scala.reflect.Manifest
для типа с типом.Разрешение `Manifest` для типа с типом
Например,
import scala.reflect.Manifest
trait Foo {
type T
}
trait Bar[T]
object Main extends App {
val barM: Manifest[Bar[Int]] =
implicitly[Manifest[Bar[Int]]]
val fooM: Manifest[Foo{type T = Int}] =
implicitly[Manifest[Foo{type T = Int}]]
}
Приведенный выше код не компилируется, что дает следующее сообщение об ошибке.
Foo.scala:15: error: type mismatch;
found : scala.reflect.Manifest[Foo]
required: scala.reflect.Manifest[Foo{type T = Int}]
Note: Foo >: Foo{type T = Int}, but trait Manifest is invariant in type T.
You may wish to investigate a wildcard type such as `_ >: Foo{type T = Int}`. (SLS 3.2.10)
implicitly[Manifest[Foo{type T = Int}]]
^
one error found
Но заявление barM
работает очень хорошо.
Я знаю, что члены типа не являются параметрами типа, но я определенно не в курсе всех тонкостей.
Как можно решить проблему Manifest
для типа с бетон тип члена?
Похоже, что это может быть связано с этим, http://www.scala-lang.org/old/node/6550. – isomarcte