List(\"a\").contains(5)
Because an Int can never be contained in a list of String
I think you misunderstand Martin's solution, it is not B <: Eq, it is B : Eq, which is a shortcut for
def Contains[B >: A](x: B)(implicit ev: Eq[B])
And Eq[X] would then contains a method
def areEqual(a: X, b: X): Boolean
This is not the same as moving the equals method of Any a little lower in the hierarchy, which would indeed solve none of the problem of having it in Any.