最近、型エイリアスでバリアンス アノテーションを使用できることに気付きました。からの例を次に示しPredef
ます。
type Function[-A, +B] = Function1[A, B]
そして、どこで使用できるかを考え始めました。明らかに、分散を反対に変更したり、不変型を共変または反変として動作させることはできません。コンパイラは次のようにエラーをスローします
scala> type BrokenFunc[+T, -R] = Function1[T, R]
<console>:7: error: covariant type T occurs in contravariant position in type
[+T, -R]T => R of type BrokenFunc
ただし、一部のバリアント型を不変のように動作させることができます (少なくとも、コンパイラはそれについて議論しません)。だから、私はの不変バージョンを作ろうとしましたList
scala> type InvList[T] = List[T]
defined type alias InvList
しかし、この新しい不変List
条件は、元の共変バージョンと同じように動作します。
scala> val l: InvList[String] = List("foo")
l: InvList[String] = List(foo)
scala> val anyList: InvList[Any] = l
anyList: InvList[Any] = List(foo)
それで、私は何が欠けていますか?型エイリアスの分散注釈の目的は何ですか? 元の型とは異なる、分散注釈付きの型エイリアスの例を教えてください。