Я пытаюсь сделать следующее
trait Stateful {
type State
}
case class SystemState(system: Stateful, state: system.State) // does not compile
То есть тип state
зависит от (значения) system
. Это, однако, не поддерживается:
незаконно зависимый тип метода: параметр появляется в типе другого параметра в том же разделе или более раннем
С аргументами функции я мог бы разделить аргументы на два списка аргументов, что невозможно с конструктором класса case:
def f(system: Stateful)(state: system.State): Unit = {} // compiles
Лучшее, что я могу сделать, это:
case class SystemState[S](system: Stateful { type State = S }, state: S) // compiles
но я думал, что это должно быть возможно без параметра типа, поскольку в dotty я предполагаю, что параметры типа desugared для ввода типов.
Мой вопрос тогда, может быть выражен без параметров типа?
В более общем контексте я изучаю, в какой степени параметры типа могут быть заменены членами типа, и когда это хорошая идея.