To customize the error message that's emitted when an implicit search finds multiple ambiguous values, annotate at least one of the implicit values@implicitAmbiguous. Assuming the implicit value is a method with type parametersX1,..., XN, the error message will be the result of replacing all occurrences of${Xi} in the stringmsg with the string representation of the corresponding type argumentTi.
If more than one@implicitAmbiguous annotation is collected, the compiler is free to pick any of them to display.
Nice errors can direct users to fix imports or even tell them why code intentionally doesn't compile.
trait =!=[C, D]implicit def neq[E, F] : E =!= F = null@annotation.implicitAmbiguous("Could not prove ${J} =!= ${J}")implicit def neqAmbig1[G, H, J] : J =!= J = nullimplicit def neqAmbig2[I] : I =!= I = nullimplicitly[Int =!= Int]