Tipo de argumento do construtor da classe de caso, dependendo do valor do argumento anterior

Estou tentando fazer o seguinte

trait Stateful {
  type State
}

case class SystemState(system: Stateful, state: system.State) // does not compile

Ou seja, o tipo destatedepende de (o valor de)system. Isso, no entanto, não é suportado:

tipo de método dependente ilegal: parâmetro aparece no tipo de outro parâmetro na mesma seção ou em um anterior

Com argumentos de função, eu poderia dividir os argumentos em duas listas de argumentos, o que não é possível com um construtor de classe de caso:

def f(system: Stateful)(state: system.State): Unit = {} // compiles

O melhor que posso fazer é:

case class SystemState[S](system: Stateful { type State = S }, state: S) // compiles

mas eu estava pensando que deveria ser possível sem um parâmetro de tipo, pois em dotty, suponho que os parâmetros de tipo sejam desejados para os membros do tipo.

Minha pergunta então é: isso pode ser expresso sem parâmetros de tipo?

Em um contexto mais geral, estou explorando até que ponto os parâmetros de tipo podem ser substituídos por membros do tipo e quando é uma boa idéia fazer isso.

questionAnswers(1)

yourAnswerToTheQuestion