'Error with type bounds in function definition

I have some class hierarchy:

trait Params
trait ParamsWithName extends Params {
  val name: String
}
case class ParamsWithNameAndValue(name: String, value: String) extends ParamsWithName

I want to implement a few classes that will use these. The following works:

trait Worker[T <: ParamsWithName] {
  def work(parameters: T): String = parameters.name
}

class SimpleWorker extends Worker[ParamsWithNameAndValue] {
  override def work(parameters: ParamsWithNameAndValue): String = s"${parameters.name} + ${parameters.value}"
}

The following does not:

trait Worker {
  def work[T <: ParamsWithName](parameters: T): String = parameters.name
}

class SimpleWorker extends Worker {
  override def work[ParamsWithNameAndValue](parameters: ParamsWithNameAndValue): String = s"${parameters.name} + ${parameters.value}"
}

The error is:

error: value name is not a member of type parameter ParamsWithNameAndValue
  override def work[ParamsWithNameAndValue](parameters: ParamsWithNameAndValue): String = s"${parameters.name} + ${parameters.value}"
error: value value is not a member of type parameter ParamsWithNameAndValue
  override def work[ParamsWithNameAndValue](parameters: ParamsWithNameAndValue): String = s"${parameters.name} + ${parameters.value}"

I would like to understand why this is the case.

Scala version is 2.12.



Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source