私は次のことをしようとしています
trait Stateful {
type State
}
case class SystemState(system: Stateful, state: system.State) // does not compile
つまり、の型はstate
(の値) に依存しますsystem
。ただし、これはサポートされていません。
不正な従属メソッド タイプ: パラメーターが、同じセクションまたは前のセクションの別のパラメーターのタイプに含まれています。
関数の引数を使用すると、引数を 2 つの引数リストに分割できますが、これはケース クラス コンストラクターでは不可能です。
def f(system: Stateful)(state: system.State): Unit = {} // compiles
私ができる最善のことは次のとおりです。
case class SystemState[S](system: Stateful { type State = S }, state: S) // compiles
しかし、ドッティでは、型パラメーターが型メンバーに脱糖されていると思われるため、型パラメーターなしで可能であると考えていました。
私の質問は、これを型パラメーターなしで表現できるかということです。
より一般的なコンテキストでは、型パラメーターを型メンバーに置き換えることができる範囲と、そうするのが良いアイデアはいつなのかを探っています。