F-ограниченная квантификация через член типа вместо параметра типа?

Я хотел бы переместить параметр типа в член типа.

Это отправная точка, которая работает:

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()
  }
}

Что меня раздражает, так это то, что я ношу с собой параметр типа[S <: Sys[S]] на протяжении всей моей библиотеки. Итак, что я думал, это:

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()
  }
}

Что не удается ...S#Tx а такжеS#Id стал как-то отрешённым

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

Какие-нибудь хитрости или изменения, которые заставляют это работать?

РЕДАКТИРОВАТЬ : Чтобы уточнить, я в первую очередь надеюсь исправить типS вSys заставить это работать. В моем случае существуют многочисленные проблемы с использованием зависимых от пути типов. Чтобы привести только один пример, который отражает ответы педрофурии и Оуэна:

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()
                          ^

Попробуй сделать этоdef foo: Foo[s.type] чтобы дать вам представление, что это ни к чему не приведет.

Ответы на вопрос(4)

Ваш ответ на вопрос