Exponer un tipo dependiente de la ruta proveniente de un tipo singleton

Estoy tratando de hacer que Scala encuentre el tipo correcto para un tipo dependiente de la ruta que proviene de un tipo singleton.

Primero, aquí está el contenedor de tipo para el ejemplo, y una instancia:

trait Container {
  type X
  def get(): X
}

val container = new Container {
  type X = String
  def get(): X = ""
}

Puedo ver la cadena en este primer intento (por lo que ya tengo un escenario de trabajo):

class WithTypeParam[C <: Container](val c: C) {
  def getFromContainer(): c.X = c.get()
}

val withTypeParam = new WithTypeParam[container.type](container)

// good, I see the String!
val foo: String = withTypeParam.getFromContainer()

Pero cuando no hay parámetro de tipo, esto ya no funciona.

class NoTypeParam(val c: Container) {
  def getFromContainer(): c.X = c.get()
}

val noTypeParam = new NoTypeParam(container)

// this does *not* compile
val bar: String = noTypeParam.getFromContainer()

Alguien sabe por qué se necesita el parámetro de tipo?

Respuestas a la pregunta(2)

Su respuesta a la pregunta