Ist ein mehrdeutiger impliziter Wert der einzige Weg, den Fehler in der Kompilierungszeit existierend zu machen

trait Foo

trait Bar extends Foo

def doStuff[T <: Foo](x: T)(implicit ev: T =!:= Foo) = x

doStuff(new Foo{}) //ambiguous implicit value
doStuff(new Bar)// successful

Die implizite Auflösung findet zur Kompilierungszeit statt, daher denke ich, dass hier zwei implizite Werte mit genau demselben Typ auszulösen sindmehrdeutig&nbsp;Sachen.

Im Moment werde ich shapeless in das Team einführen. Meine Kollegen denken, dass dieses mehrdeutige Implizit nicht ideal ist, und ich habe keine stichhaltigen Argumente dafür. Ist dies die einzige Möglichkeit, um in scala typensicher zu machen? Wenn ja, wie kann ich die Fehlermeldung anpassen?

Bearbeiten:

In der Formlosen möchte ich die Summe von 2 NAT ungleich 7 machen, ich kann so codieren, damit die Kompilierung fehlschlägt.

def typeSafeSum[T <: Nat, W <: Nat, R <: Nat](x: T, y: W)
         (implicit sum: Sum.Aux[T, W, R], error: R =:!= _7) = x

typeSafeSum(_3, _4)

aber die fehlermeldung ist mehrdeutig impliziter wert, wie kann ich die fehlermeldung anpassen?