Полагаю, вы могли бы сделать что-то вроде этого:
def max[A](list: List[A])(implicit ord: Ordering[A]): A = {
list.tail.foldLeft(list.head) ((a, b) => if (ord.lt(a, b)) b else a)
}
implicit def toOrdering[A <% Ordered[A]]: Ordering[A] = new Ordering[A] {
def compare(a: A, b: A): Int = (a < b, b < a) match {
case (true, _) => -1
case (_, true) => 1
case _ => 0
}
}
println(max(List(1, 2, 3, 2, 1)))
Код работает как в Scala 2.7.7, так и в 2.8.0 (тестируется прямо сейчас в обоих), хотя неявное определение не нужно (и, возможно, вредно в некоторых ситуациях) в Scala 2.8.