O valor implícito ambíguo é a única maneira pela qual queremos que o erro exista no tempo de compilação
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
A resolução implícita está acontecendo no tempo de compilação, então aqui eu acho que pode haver dois valores implícitos com exatamente o mesmo tipo para acionarambíguo coisa.
No momento, vou introduzir o disforme na equipe, meus colegas acham que esse implícito ambíguo não é o ideal e não tenho argumentos fortes sobre isso. Essa é a única maneira de fazê-lo para tornar o tipo seguro no scala. Se for, o que posso fazer para personalizar a mensagem de erro?
Editar:
No informe, quero tornar a soma de 2 NAT diferente de 7, posso codificar assim para fazer a compilação falhar.
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)
mas a mensagem de erro é um valor implícito ambíguo, como posso personalizar a mensagem de erro?