Weil die Sprachspezifikation dies sagt .
Ein Haskell-Programm ist eine Sammlung von Modulen, von denen eines per Konvention den Namen
Main
haben muss und den Wertmain
exportieren muss. Der Wert des Programms ist der Wert des Bezeichnersmain
in ModulMain
, der eine Berechnung vom TypIO t
für einen Typt
sein muss (siehe Kapitel 7). Wenn das Programm ausgeführt wird, wird die Berechnungmain
durchgeführt, und ihr Ergebnis (vom Typt
) wird verworfen.
Wie GolezTrol sagte, müssen alle Programme wissen, welches Symbol beim Ausführen der Funktion gestartet werden soll. Viele Skriptsprachen benötigen (oder brauchen nicht) eine main
-Routine, da sie Anweisungen auf der obersten Ebene haben können. Dies ist bei Haskell, C und vielen anderen nicht der Fall - diese Sprachen benötigen einen Startort und nach Konvention die Funktion main
(gemäß der Haskell-Spezifikation - siehe Cat's Antwort).
Hinweis Haskells main
akzeptiert keine Parameter, die den Programmargumenten entsprechen - diese werden über System.Environment.getArgs
erhalten.
Wie in C, Java oder C # ist main
eine spezielle Kennung in bestimmten Kontexten, die anzeigt, wo das Programm starten soll.
In Haskell ist für main
der Typ IO a
definiert. Sie sollten Ihrer Funktion entweder einen anderen Namen geben, oder, wenn Sie es wirklich als Ausgangspunkt haben wollen, ändern Sie ihre Signatur und lassen Sie sie die Argumente von der Kommandozeile mit getArgs
Obwohl Sie es nicht speziell gefragt haben, ist main
auch insofern besonders, als es die einzige Funktion in einem Haskell-Programm ist, die IO-Aktionen (sicher) aufrufen kann. Die Haskell-Laufzeit behandelt main
als speziell.
Per Definition ist main
eine Funktion, die keine Argumente akzeptiert und einen Wert vom Typ IO a
zurückgibt, der von der Laufzeitumgebung verworfen wird. Ihre Fehlermeldung besagt, dass Ihr main
diese Anforderungen nicht erfüllt. Dies ist in der Tat richtig, da Ihr main
zwei Parameter empfängt.
Um auf Kommandozeilenparameter zuzugreifen, verwenden Sie System.Environment.getArgs
.
Tags und Links haskell compiler-errors io types main