2014-09-03 5 views
8

Einige Sprachen (wie Go & Rust) erfordern, dass der Programmierer gewissenhaften Code aus der Quelle entfernt. Dies hat Vorteile in der Wartbarkeit und Lesbarkeit des Codes, wenn es für einige Benutzer etwas extrem ist.So aktivieren Sie Dead-Code-Warnungen in Haskell (GHC)

Wie kann ich diese Funktion in Haskell aktivieren? (Ist es möglich?) Zum Beispiel möchte ich im folgenden Code url2 als toten Code markiert werden, da es nicht in main verwendet wird.

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

main = print url1 

Ich sah Bezug auf einige Compiler-Flags (z -fwarn-unused-binds, -fwarn-name-shadowing und -fwarn-hi-shadowing), aber keiner von ihnen scheinen zu erreichen, was ich will.

+0

Erscheint bei der Kompilierung dieses Codes irgendetwas mit "-Wall" über nicht verwendete Namen? Wenn nicht, warnt GHC nicht davor. – bheklilr

+0

Nein. Dies erzwingt die Hinzufügung von Typ-Signaturen, nicht aber die Anzeige von Dead-Code-Warnungen. –

+0

Dann glaube ich nicht, dass GHC das überprüfen wird. Siehe [die GHC-Dokumente] (http://www.haskell.org/ghc/docs/7.6.3/html/users_guide/options-sanity.html) für welche Warnungen verfügbar sind. – bheklilr

Antwort

17

GHC wird url2 als totem Code mit -fwarn-unused-binds melden, wenn Sie die Liste der Exporte aus dem Modul in geeigneter Weise einschränken, zB:

module Main(main) where 
... 

Wenn Ihr Modul-Header

module Main where 

nur dann sind Sie exportiert implizit alles und kann daher keine Bindung auf oberster Ebene als unbenutzt betrachten.

+0

Großartig. Gibt es eine Möglichkeit, eine "Modul" -Zeile in der Quelldatei zu benötigen? –

+0

Der Standard, wenn 'Modul' nicht angegeben ist, ist' Modul Main (Haupt) wo' - siehe https://www.haskell.org/onlinereport/haskell2010/haskellch5.html#x11-990005.1, aber ich bin mir nicht bewusst von irgendeiner Warnung, die Ihnen erlaubt, darauf zu bestehen, dass es die 'Modul'-Linie zur Verfügung stellt. –