1

ある f-bounded 型から別の型への射影を使用すると、理解できない型エラーが発生します。以前の質問に関連している可能性がありますが、よくわかりません。

セットアップは簡単です:

trait Foo[F <: Foo[F]] {
  type I <: Foo[I]
}

つまり、F別の同様のシステムへの投影を含むシステムがあります。

わかりました、今私がする必要があるのは、与えられFた を使用できるようにすることF#Iです。しかし、コンパイラは文句を言います:

trait Test {
  def apply[F <: Foo[F]]: Unit = bar[F#I]   // type error
  def bar  [F <: Foo[F]]: Unit = ???
}

<console>:52: error: type arguments [F#I] do not conform to method bar's 
  type parameter bounds [F <: Foo[F]]
             def apply[F <: Foo[F]]: Unit = bar[F#I]
                                               ^

では、これはなぜですか?そして、解決策はありますか?


実際には、何が起こっているのかを説明していない、この問題の変種のようです。


編集:たとえば、次のコンパイル:

trait Test {
  def apply[F <: Foo[F] { type I = I1 }, I1 <: Foo[I1]]: Unit = bar[I1]
  def bar  [F <: Foo[F]]: Unit = ???
}

ここでの問題は、そのくだらない型パラメーターI1が API の数十のレベルにバブルアップすることです。そのため、2 番目の型パラメーターを回避する解決策を見つける必要があります。

4

1 に答える 1