Итак, я изучаю Haskell и хотел написать простой код, который просто повторяет каждую букву в строке дважды. Поэтому я придумал это:
repl :: String->String
repl " " = " "
repl (x:xs) = x:x:repl xs
Теперь при компиляции я не получил предупреждения, но произошла ошибка во время выполнения repl "abcd"
:
"abcd*** Exception: repl.hs:(2,1)-(3,23): Non-exhaustive patterns in function repl
Итак, почему компилятор никогда не сообщал об этом и почему он игнорируется в Haskell, когда есть много языков, таких как OCaml, которые отчетливо сообщают об этом во время компиляции?