Я пытаюсь использовать код "хороший стиль Haskell", поэтому я стараюсь следовать типичным стандартам кодирования, которые я нахожу. Кроме того, компиляция с использованием -Wall и -Werror, к которой я привык, когда вы приходите из C. Одно из предупреждений, которые я часто получаю, это "Связывание верхнего уровня без сигнатуры типа", а затем компилятор сообщает мне, что такое подпись типа.
Мне не хватает того, что явно имеет явная подпись типа. В качестве конкретного примера:
-- matchStr :: String -> String -> Maybe (String)
matchStr str s
| isPrefixOf str s = Just(drop (length str) s)
| otherwise = Nothing
Теперь, что произойдет, если я хочу изменить тип от String до ByteString для повышения производительности; Мне придется импортировать пакет ByteString и использовать квалифицированную версию некоторых функций. Никаких других изменений не требуется. Если у меня есть подпись типа, тогда мне также нужно изменить это, и все же компилятор Haskell заметит это изменение и правильно выведет новые типы.
Так что мне не хватает? Почему считается хорошей идеей явно помещать сигнатуры типа в функции в общем случае? то есть я понимаю, что могут быть исключения, когда это хорошая идея, но почему она считается хорошей вообще?