У меня есть эта функция в Haskell:
test :: (Eq a) => a -> a -> Maybe a
test a b
| a == b = Just a
test _ _ = Nothing
Вот что я получил, когда попробовал функцию с разными входами:
ghci>test 3 4
Nothing
ghci>test 3 3
Just 3
Согласно Real World Haskell, первый шаблон неопровержим. Но похоже, что тест 3 4
не дает сбоя в первом шаблоне и соответствует второму. Я ожидал какой-то ошибки - может быть, «неисчерпаемые охранники». Итак, что здесь происходит на самом деле, и есть ли способ включить предупреждения компилятора в случае, если это случайно произойдет?