Предупреждения при загрузке из подсказки GHCi

При использовании GHCi я хотел бы знать, как я могу использовать опцию -Wall при (повторной) загрузке из подсказки.

Например, в разделе 3.3 Советов по программированию на Haskell показан следующий пример с охранниками:

-- Bad implementation:
fac :: Integer -> Integer
fac n | n == 0 = 1
      | n /= 0 = n * fac (n-1)

-- Slightly improved implementation:
fac :: Integer -> Integer
fac n | n == 0    = 1
      | otherwise = n * fac (n-1)

В нем говорится: «Первая проблема заключается в том, что для компилятора почти невозможно проверить, являются ли такие защиты исчерпывающими, поскольку условия защиты могут быть произвольно сложными (GHC предупредит вас, если вы используете параметр -Wall)».

Я знаю, что могу ввести ghci -Wall some_file.hs из командной строки, но однажды в приглашении я не знаю, как проверить предупреждения, если я хочу перезагрузить.

Кажется, я не могу найти ответ после попытки поиска в Google!

Заранее спасибо!


person Sarah Tattersall    schedule 08.11.2012    source источник
comment
Вы можете поместить его в свой файл .ghci для удобства. У меня есть :set -Wall\n :set -fno-warn-type-defaults\n :set -fno-warn-unused-do-bind, чтобы включить все, кроме надоедливых предупреждений.   -  person Daniel Fischer    schedule 09.11.2012
comment
Если вы установите -Wall в первый раз, я думаю, он останется установленным и для любых перезагрузок...   -  person Ben Millwood    schedule 10.11.2012


Ответы (1)


В ghci введите

:set -Wall

и если вы хотите отключить все предупреждения, вы можете сделать

:set -w

(Обратите внимание на строчные буквы w. Прописные буквы означают включение обычных предупреждений.)

В руководстве пользователя говорится мы можем использовать любые параметры командной строки ghc в командной строке, если они указаны как динамические, и мы можем видеть из ссылка на флаг о том, что все настройки предупреждений являются динамическими.

Вот пример сеанса с использованием «плохой реализации» выше:

Prelude> :l temp.hs
[1 of 1] Compiling Main             ( temp.hs, interpreted )
Ok, modules loaded: Main.
(0.11 secs, 6443184 bytes)

*Main> :set -Wall

*Main> :l temp.hs
[1 of 1] Compiling Main             ( temp.hs, interpreted )

temp.hs:3:1:
    Warning: Pattern match(es) are non-exhaustive
             In an equation for `fac': Patterns not matched: _

Ok, modules loaded: Main.
(0.14 secs, 6442800 bytes)
person AndrewC    schedule 08.11.2012