Как систематически избегать небезопасного сопоставления с образцом в Scala?

Рассмотрим следующую неработающую функцию:

def sum (list : Seq[Int]) : Int = list match {
  case Nil => 0
  case head :: tail => head + sum(tail)
}

Здесь функция должна была работать с List [Int] , но была переработана принять вместо этого Seq [Int] , таким образом нарушая работу без ведома компилятора.

Эта зияющая дыра в обнаружении неполного сопоставления с шаблоном в Scala делает его практически бесполезным.

Я хочу иметь способ систематического обнаружения таких проблем. В частности, я бы хотел, чтобы компилятор выдавал ошибку / предупреждение при каждом сопоставлении с шаблоном, управляемым instanceof , т.е. я хочу разрешить сопоставление шаблонов только в запечатанных иерархиях и на настраиваемых сопоставителях.

Существуют ли параметры / плагины компилятора для выполнения консервативных (в отличие от произвольных) проверок безопасности сопоставления с образцом?

12
задан Rotsor 18 January 2012 в 14:20
поделиться