2014-09-03 26 views
8

Alcune lingue (come Go & Rust) richiedono che il programmatore sia diligente nel rimuovere tutto il codice morto dalla sorgente. Ciò ha benefici sulla manutenibilità e leggibilità del codice, se un po 'estremo per alcuni utenti.Come abilitare gli avvisi di dead code in Haskell (GHC)

Come abilitare questa funzione in Haskell? (È possibile?) Ad esempio, nel codice seguente, mi piacerebbe che url2 venga contrassegnato come codice morto perché non viene utilizzato in main.

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

main = print url1 

vidi riferimento ad alcuni flag di compilazione (ad esempio -fwarn-unused-binds, -fwarn-name-shadowing, e -fwarn-hi-shadowing), ma nessuno di loro sembra per realizzare quello che voglio.

+0

Qualcosa compare con '-Wall' sui nomi inutilizzati quando si compila quel codice? In caso contrario, GHC non mette in guardia contro di esso. – bheklilr

+0

No. Questo forza le firme del tipo da aggiungere, ma non gli avvisi di dead code. –

+0

Quindi non credo che GHC lo verificherà. Vedi [i documenti GHC] (http://www.haskell.org/ghc/docs/7.6.3/html/users_guide/options-sanity.html) per quali avvertimenti sono disponibili. – bheklilr

risposta

17

GHC riporterà url2 codice come morto con -fwarn-unused-binds se si limita l'elenco delle esportazioni dal modulo in modo appropriato, ad esempio:

module Main(main) where 
... 

Se il colpo di testa del modulo è solo

module Main where 

allora siete esportando implicitamente tutto e quindi non può considerare l'eventuale binding di livello superiore inutilizzato.

+0

Grande. C'è un modo per richiedere anche una riga 'module' nel file sorgente? –

+0

L'impostazione predefinita se 'module' non è specificato è' modulo Main (main) where' - vedere https://www.haskell.org/onlinereport/haskell2010/haskellch5.html#x11-990005.1, ma non sono a conoscenza di qualsiasi avvertimento che permetta di insistere sul fatto che sia fornita la linea 'module'. –

Problemi correlati