Haskell REPL(GHCi)と実際のHaskellプログラムは大きく異なります。
この違いの理由は、2つの形式の目的です。第一に、GHCiはテスト領域であり、コード実行領域ではありません。しかし、Haskellのソースファイルは特定のプロセスを実行するためのもので、その名前はmain
です。ソースファイルを実行すると、Haskellコンパイラ(通常はGHC)がというIO
アクションを探して実行しようとします。この場合、main
が存在しないため、失敗しました。
第2に、あなたが入力したものは有効なHaskellプログラムではなく、GHCiではうまくいくがHaskellソースではない宣言です。これは、ソース・ファイルに正しい次のようになります。
squareMe x = x * x
myFruit = ["banana", "apple", "kiwi", "orange"]
はlet
の欠如に注意してください。 Haskellのソースファイルは、宣言にそれを使用しません。
repl.itでは、これはまだmain
が不足していると言いますが、REPLのsquareMe
とmyFruit
を心配することなく参照できます。つまり、エラーは引き続き表示されますが、それでも問題はありません。なぜなら、ファイルに書いたものを使用できるからです。
警告を抑止したい場合は、行書くことができます:
main :: IO() -- This says that main is an IO action.
main = return() -- This tells main to do nothing.
を使用すると、プログラムがこれの代わりに行うかもしれない多くのものがあります。いくつか例があります:
main = putStrLn "No errors!"
実行時にNo errors!
が印刷されます。
main = print myFruit
実行すると、["banana", "apple", "kiwi", "orange"]
が印刷されます。
この回答は、特にreplsitサイトに適用されることに注意してください。一般的に、これはHaskellプログラムの構造です。
プログラムにはエントリポイントが必要です:プログラムは 'main'と呼ばれるモナド関数です。 –
あなたが書いたものは本当に正しいものではありません。コードは完全ではありません(私は 'main'がありません)。また、[*なるように*]をチェックしてください(http://learnyouahaskell.com/syntax-in-functions#let-it-be)。最初からその本を読むことをお勧めします。 – KarelG