Является ли неоднозначное неявное значение единственным способом, которым мы хотим, чтобы ошибка существовала во время компиляции

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

Неявное разрешение происходит во время компиляции, поэтому здесь я думаю, что может быть два неявных значения с точно таким же типом для запускадвусмысленный вещи.

Прямо сейчас я собираюсь ввести бесформенное в команду, мои коллеги думают, что это неоднозначное неявное не идеально, и у меня нет веских аргументов по этому поводу. Это единственный способ сделать это для того, чтобы сделать тип безопасным в Scala. Если это так, что я могу сделать, чтобы настроить сообщение об ошибке?

Редактировать:

В бесформенном я хочу сделать сумму 2 NAT не равной 7, я могу кодировать, как это, чтобы компиляция не удалась.

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)

но сообщение об ошибке имеет неоднозначное неявное значение, как я могу настроить сообщение об ошибке?

Ответы на вопрос(3)

Ваш ответ на вопрос