There's an Ordered[T] trait, so maybe you can make X and Y inherit from Ordered, override the "compare" method, and get every comparison operator for free?
> scala> case class A(value: Int) extends Ordered[A] { def compare(that: A) = value.compare(that.value) }
> defined class A
>
> scala> val a = new A(1)
> a: A = A(1)
>
> scala> val b = new A(2)
> b: A = A(2)
>
> scala> a < b
> res1: Boolean = true
Cheers,
François-Xavier