2012-06-20 8 views
24

Haskell 98 Spezifikation besagt, dass der Einstiegspunkt eines Programms, nämlich Funktion main, in dem Modul namens Main, per Konvention befinden sollte. Aber auch wenn Sie module Main where nicht an der Spitze der Datei schreiben, schreiben Sie main in, der Quellcode kompiliert und scheint richtig zu funktionieren, wenn Sie GHC verwenden.Um zu schreiben oder nicht zu schreiben `Modul Haupt wo` in Haskell

Die Frage ist:

  1. Was ist der Unterschied zwischen module Main where Schreiben und Schreiben nicht wahr?
  2. Welches ist bevorzugt?

Antwort

22

Es gibt nicht wirklich einen Unterschied, module Main (main) where wäre die implizite Definition, wenn Sie selbst keine Kopfzeile angeben. Vom Haskell 98 Report:

abgekürzten Form des Moduls, die nur aus der Modulkörper, ist zulässig. Wenn dies verwendet wird, wird angenommen, dass der Header module Main(main) where ist.

Ich würde eine explizite Definition zu einer impliziten bevorzugen, aber für eine Main.hs ist es eine geringfügige Präferenz.

+8

Der Unterschied ist, dass ohne Modul-Header nur 'main' exportiert wird, aber mit' module Main wo' wird jede Top-Level-Definition exportiert. Scheint, dass deine Augen 'Modul Main (main) wo 'gesehen haben, wo keine Exportliste vorhanden war;) –

+4

Es ist wichtig, die Exportliste' (main) 'zu haben, weil der Compiler dadurch mehr optimieren kann. – augustss

+0

@DanielFischer @augustss Ich kann keine Dokumentation finden, die das unterstützt. GHC scheint diese Unterscheidung beim Erstellen einer ausführbaren Datei nicht zu treffen; es scheint die gleiche Optimierung und Verknüpfung für 'Modul Haupt (Haupt) wo 'als' Modul Haupt wo auch 'zu machen. – jdeseno

Verwandte Themen