Рекомендуется ли всегда иметь исчерпывающие совпадения шаблонов в Haskell, даже для "невозможных" случаев?
Например, в следующем коде я сопоставляю шаблоны на "аккумуляторе" foldr. Я полностью контролирую содержимое аккумулятора, потому что я его создаю (он не передается мне как вход, а скорее встроен в мою функцию). Поэтому я знаю, что некоторые шаблоны никогда не должны совпадать. Если я попытаюсь никогда не получить "Match Match (es) - не исчерпывающая" ошибка, то я бы поставил для него шаблонное совпадение, которое просто ошибкой с сообщением "Этот шаблон никогда не должен происходить". Очень похоже на утверждение в С#. Я не могу придумать что-нибудь еще.
Какую практику вы бы порекомендовали в этой ситуации и почему?
Здесь код:
gb_groupBy p input = foldr step [] input
where
step item acc = case acc of
[] -> [[item]]
((x:xs):ys) -> if p x item
then (item:x:xs):ys
else [item]:acc
Образец, не совпадающий (как сообщает интерпретатор):
Предупреждение: совпадение шаблонов не является исчерпывающим В случае альтернативы: шаблоны не совпадают: []: _