web-dev-qa-db-ja.com

Haskell:解析エラー:モジュールヘッダー、インポート宣言またはトップレベル宣言が必要です

Haskellの教科書で作業しているときに、一部のコマンドをHaskellスクリプトの.hsファイルに保存しています。ここに小さな例があります。

fst (1,2)
snd (1,2)

これらのコマンドをGHCiのプレリュードから実行すると、正常に動作します。これらの2行で.hsファイルをコンパイルしようとすると、次のようになります。

ch4_test.hs:2:1: error:
    Parse error: module header, import declaration
    or top-level declaration expected.
  |
2 | fst (1,2)
  | ^^^^^^^^^
Failed, no modules loaded.

私はこのエラーをグーグルで検索しましたが、何が間違っているのか説明が見つかりません。

10
Steve3p0

Hsファイルに式を入れることはできません。

エラーメッセージが示すように、ここで宣言が必要です。例えば:

main =
    print (fst (1,2)) >>
    print (snd (1,2))
5
melpomene

初心者から将来の初心者へ:インタラクティブな環境ghciを使用すると、いくつかの式を.hsファイルにパンチして、(SwiftおよびRuby)。これはそうではありません。

Haskellにはmainというエントリーポイントが必要です。引用:

次に、文字を読み取って印刷する簡単なプログラムを示します。

main :: IO ()
main =  do c <- getChar
           putChar c

Mainという名前の使用は重要です。mainはHaskellプログラムのエントリポイントとして定義され(Cのmain関数と同様)、IOタイプ(通常はIO)を持つ必要があります()

出典: https://www.haskell.org/tutorial/io.html

12
Lou Zell