2014-09-03 10 views
8

Niektóre języki (np. Go & Rdza) wymagają od programisty dokładnego usuwania całego martwego kodu ze źródła. Ma to zalety w zakresie łatwości konserwacji kodu i czytelności, jeśli dla niektórych użytkowników jest nieco ekstremalny.Włączanie ostrzeżeń o martwym kodzie w Haskell (GHC)

Jak mogę włączyć tę funkcję w Haskell? (Czy to możliwe?) Na przykład w poniższym kodzie, chciałbym, aby url2 został oznaczony jako martwy kod, ponieważ nie jest używany w main.

url1 = "http://stackoverflow.com" 
url2 = "http://stackexchange.com" 

main = print url1 

Widziałem odniesienie do niektórych flag kompilatora (np -fwarn-unused-binds, -fwarn-name-shadowing i -fwarn-hi-shadowing), ale żaden z nich nie wydają się osiągnąć to, co chcę.

+0

Czy coś pojawia się z '-Wall' o nieużywanych nazwach podczas kompilacji tego kodu? Jeśli nie, GHC nie ostrzega przed tym. – bheklilr

+0

Nie. Wymusza to dodawanie podpisów, ale nie ostrzeżeń o martwym kodzie. –

+0

Potem nie wierzę, że GHC to sprawdzi. Zobacz [dokumentacja GHC] (http://www.haskell.org/ghc/docs/7.6.3/html/users_guide/options-sanity.html), aby dowiedzieć się, jakie ostrzeżenia są dostępne. – bheklilr

Odpowiedz

17

GHC zgłosi url2 jako martwy kod z -fwarn-unused-binds jeśli ograniczenie wykazu eksportu z modułu odpowiednio, np:

module Main(main) where 
... 

Jeśli nagłówek moduł jest tylko

module Main where 

to jesteś niejawnie eksportuje wszystko i dlatego nie może uznać żadnego nieużywanego powiązania najwyższego poziomu.

+0

Świetnie. Czy istnieje sposób na wymaganie linii 'module' w pliku źródłowym? –

+0

Domyślnie, jeśli 'module' nie jest określony,' module Main (main) where' - zobacz https://www.haskell.org/onlinereport/haskell2010/haskellch5.html#x11-990005.1, ale nie jestem świadomy dowolnego ostrzeżenia, które pozwala ci nalegać, aby podano linię 'moduł'. –