Quantificação limitada por F através do membro type em vez do parâmetro type?

Eu gostaria de mover um parâmetro de tipo para um membro de tipo.

Este é o ponto de partida que funciona:

trait Sys[S <: Sys[S]] {
  type Tx
  type Id <: Identifier[S#Tx]
}

trait Identifier[Tx] {
  def dispose()(implicit tx: Tx): Unit
}

trait Test[S <: Sys[S]] {
  def id: S#Id
  def dispose()(implicit tx: S#Tx) {
    id.dispose()
  }
}

O que me incomoda é que estou carregando um parâmetro de tipo[S <: Sys[S]] em todas as minhas bibliotecas. Então o que eu estava pensando é isto:

trait Sys {
  type S = this.type  // ?
  type Tx
  type Id <: Identifier[S#Tx]
}

trait Identifier[Tx] {
  def dispose()(implicit tx: Tx): Unit
}

trait Test[S <: Sys] {
  def id: S#Id
  def dispose()(implicit tx: S#Tx) {
    id.dispose()
  }
}

Que falha ...S#Tx eS#Id tornou-se de alguma forma desanexado:

error: could not find implicit value for parameter tx: _9.Tx
               id.dispose()
                         ^

Algum truque ou alteração que faça funcionar?

EDITAR : Para esclarecer, estou principalmente esperando para corrigir o tipoS emSys para fazer funcionar. Existem inúmeros problemas no meu caso usando tipos dependentes de caminho. Para dar apenas um exemplo que reflete as respostas de pedrofuria e Owen:

trait Foo[S <: Sys] {
  val s: S
  def id: s.Id
  def dispose()(implicit tx: s.Tx) {
    id.dispose()
  }
}

trait Bar[S <: Sys] {
  val s: S
  def id: s.Id
  def foo: Foo[S]
  def dispose()(implicit tx: s.Tx) {
    foo.dispose()
    id.dispose()
  }
}

<console>:27: error: could not find implicit value for parameter tx: _106.s.Tx
               foo.dispose()
                          ^

Tente fazer issodef foo: Foo[s.type] para lhe dar uma ideia de que isso não leva a nada.

questionAnswers(4)

yourAnswerToTheQuestion