Это продолжение Почему я получаю "Неисчерпывающие шаблоны в функции..." когда я вызываю свою подстроку Haskell?
Я понимаю, что, используя -Wall
, GHC может предупреждать о не исчерпывающих шаблонах. Мне интересно, почему причина не делает ошибку компиляции по умолчанию, учитывая, что всегда можно явно определить частичную функцию:
f :: [a] -> [b] -> Int
f [] _ = error "undefined for empty array"
f _ [] = error "undefined for empty array"
f (_:xs) (_:ys) = length xs + length ys
Вопрос не связан с GHC.
Это потому, что...
- Никто не хотел принуждать компилятор Haskell выполнять такой анализ?
- не исчерпывающий поиск по шаблону может найти некоторые, но не все случаи?
- частично определенные функции считаются законными и используются достаточно часто, чтобы не налагать вид конструкции, показанный выше? Если это так, не могли бы вы объяснить мне, почему неисчерпывающие шаблоны полезны/законны?