Считается хорошей практикой, чтобы включить предупреждения GHC с помощью -Wall
. Однако я обнаружил, что исправление этих предупреждений отрицательно влияет на некоторые типы кодовых конструкций.
Пример 1:
Использование эквивалента do-notation для f >>
будет генерировать предупреждение, если я явно не использую форму _ <- f
:
Warning: A do-notation statement discarded a result of type Char.
Suppress this warning by saying "_ <- f",
or by using the flag -fno-warn-unused-do-bind
Я понимаю, что я могу забыть что-то сделать с результатом f
. Однако, законно игнорировать результат (очень распространенный в парсерах). При использовании >>
нет предупреждения, не так ли? Использование _ <-
тяжелее, чем нужно.
Пример 2:
Именование переменной шаблона с тем же именем видимой функции даст:
Warning: This binding for `map' shadows the existing binding
imported from Prelude
Это ухудшается при использовании синтаксиса записи, поскольку пространство имен быстро загрязняется. Решение заключается в предоставлении альтернативного имени в выражении шаблона. Поэтому я использую менее подходящее имя, чтобы избежать предупреждения. Я не чувствую, что это достаточно хорошая причина.
Я знаю, что могу использовать опции -fno-warn-...
, но должен ли я придерживаться -Wall
в конце концов?