我在爲具有類型成員的類型解析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