Вы указали, как сравнивать Person
с, но не для A <: Person
, а в people.sorted
компилятор должен знать, как это сделать.
Попробуйте
trait Person extends Ordered [Person] {
def age: Int
def compare(that: Person): Int = implicitly[Ordering[Person]].compare(this, that)
}
implicit def personOrdering[A <: Person]: Ordering[A] = (x, y) => x.age.compare(y.age)
class Dinner[A <: Person](val people: Seq[A]) {
def who: Seq[A] = people.sorted
}
case class PersonImpl(age: Int) extends Person
val dinner = new Dinner[PersonImpl](Seq(PersonImpl(30), PersonImpl(20)))
dinner.who // List(PersonImpl(20), PersonImpl(30))