The problem is what Valueperforms Ordered[Enumeration#Value], not Ordered[Dogs.Value]. I do not know the reason for this, it is impossible to do it any other way.
- :
scala> (Rover: Ordered[Enumeration
res44: Boolean = false
A Ordered , , param Ordered[A], Dogs.Value <: Ordered[Enumeration#Value]. A , , .
, Enumeration#Value:
scala> val xs = List[Enumeration#Value](Rover, Tom, Sam, Sam, Rover)
xs: List[Enumeration#Value] = List(Rover, Tom, Sam, Sam, Rover)
scala> doSomething(xs)
List(Sam, Sam, Tom, Rover, Rover)
, doSomething:
scala> doSomething[Enumeration#Value](List(Rover, Sam))
List(Sam, Rover)
, , , Ordered .
scala> def doSomething[A <% Ordered[_ >: A]](xs : List[A]) = xs sortWith (_ < _)
doSomething: [A](xs: List[A])(implicit evidence$1: (A) => Ordered[_ >: A])List[A]
scala> doSomething(List(Rover, Sam))
res47: List[Dogs.Value] = List(Sam, Rover)
?
scala> Rover: Ordered[_ <: Enumeration
res52: scala.math.Ordered[_ <: Enumeration