Consider the following broken function:
def sum (list : Seq[Int]) : Int = list match {
case Nil => 0
case head :: tail => head + sum(tail)
}
Here, the function was supposed to work with a List[Int]
, but was refactored to accept Seq[Int]
instead, thus becoming broken without the compiler noticing.
This gaping hole in Scala's incomplete pattern match detection makes it next to useless.
I want to have a way of systematically detecting such problems. Specifically, I'd like the compiler to emit an error/warning on every instanceof
-guided pattern match, i.e. I only want to allow pattern matches on sealed hierarchies and on custom matchers.
Are there existing compiler options/plugins for doing conservative (as opposed to arbitrary) checks of pattern matching safety?
List
very often, too. My advice in this case is to uselist.toList match ...
(because you know in advance you probably will refactor some code (perhaps not this method) later on and the match cases are only working withList
), then you can refactor the method parameter toSeq
without broken code. – Argolis