Какой конкретный вариант использования заслуживает оператора =: = вместо ограничения контекста и почему?

В следующем коде (упомянутом в другом ответе, но приводит к отдельному вопросу) так называемый параметр доказательства используется, чтобы указать компилятору, что параметр A имеет строковый тип через привязку контекста.

case class Foo[A](a:A) { // 'A' can be substituted with any type

                      // type constraint ensures type A
  def getStringLength(implicit evidence: A =:= String) = a.length
}

Но почему бы просто не определить класс вообще без параметра типа? Я имею в виду, что если вы параметризуете используемый тип, то вам нужен общий класс; в противном случае, почему бы просто не опустить параметр типа, как показано ниже?

case class Foo(a: String) {
  def getStringLength(implicit evidence: A) = a.length
}

Каков пример, когда контекстная привязка дает преимущество?


person Thomas Adkins    schedule 07.06.2016    source источник
comment
Сайт School of Scala ошибается в этом, насколько мне известно, они никогда не исчезли.   -  person pedrofurla    schedule 08.06.2016
comment
Между прочим, доказательство scala-lang.org/api/current/   -  person pedrofurla    schedule 08.06.2016