2012-11-08 10 views
17

Podczas korzystania z GHCi chciałbym wiedzieć, w jaki sposób mogę użyć opcji -Wall, gdy (ponownie) ładuję się z monitu.Ostrzeżenia dotyczące obciążenia z podpowiedzi GHCi

Na przykład w rozdziale 3.3 Haskell Programming Tips przedstawionym przykładzie ze strażników jest następujący:

-- 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) 

mówi „Pierwszym problemem jest to, że jest to prawie niemożliwe, aby kompilator, aby sprawdzić, czy strażnicy takie jak ten są wyczerpujące , ponieważ warunki straży mogą być dowolnie złożone (GHC ostrzeże cię, jeśli użyjesz opcji -Wall). "

Wiem, że mogę wpisać ghci -Wall some_file.hs z wiersza poleceń, ale raz w monicie nie jestem pewien, jak sprawdzić ostrzeżenia, jeśli chcę przeładować.

Nie mogę znaleźć odpowiedzi po wypróbowaniu tego w Google!

Z góry dzięki!

+2

Można umieścić go w pliku '.ghci' dla wygody. Mam ': set -Wall \ n: set -fno-warn-type-defaults \ n: set -fno-warn-unused-do-bind', aby włączyć wszystkie oprócz denerwujących ostrzeżeń. –

+0

Jeśli ustawisz '-Wall' po raz pierwszy, myślę, że pozostanie on ustawiony dla każdego przeładowania, zbyt ... –

Odpowiedz

22

W ghci wprowadź

:set -Wall 

a jeśli chcesz, aby włączyć wszystkie ostrzeżenia off, można zrobić

:set -w 

(uwaga na małe litery w. Wielkie będzie włączyć normalne ostrzeżenia o).

W dokumencie the user guide podano, że możemy użyć dowolnej opcji wiersza polecenia ghc w wierszu polecenia, o ile są one wymienione jako dynamiczne, a widzimy to z the flag reference, że wszystkie ustawienia ostrzeżeń są dynamiczne.

Oto sesja przykład, przy użyciu „złe wdrożenie” powyżej:

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)