8

今朝の悪いニュースですが、Haskell の学習を続けるために Leksah (ちなみに見栄えの良いアプリケーション) を試してみようと思っていました。

leksah tutorialを読んで見つけた「Hello World」の例をコンパイルできませんでした。

module Main (
main = putStrLn "Hello World"     
) where

compilation-error: src\Main.hs:16:5: parse error on input='`

module Main (
) where
main = putStrLn "Hello World"

compilation-error: src\Main.hs:1:0: The main functionmain' はモジュールによってエクスポートされませんMain'

何か他のことを試すように私に何をアドバイスしますか?

重要な編集: Leksah には Main.hs ファイルが同梱されています。このファイルは、leksah を初めて起動したときに直接読み込まれ、完全に機能する Hello World ミニ プロジェクトが含まれています。また、最小限の単体テスト カウンター パーツもあります。初心者に最適:-)

4

3 に答える 3

15

モジュール名の後の括弧内のテキストは、エクスポート リストです。つまり、エクスポートするプログラムにすべての関数を配置する必要があります。ただし、これとは別に、メイン関数をどこかに定義する必要もあります。これを試して:

module Main (
  main
) where
main = putStrLn "Hello World"

PS:モジュール内のすべてがエクスポートされるため、括弧とそこにあるものをすべて削除することもできます。

于 2011-01-12T10:27:03.883 に答える
6

「すべてをエクスポートするのは良い習慣ですか?」絶対にありません。ヘルパー メソッドなどの実装の詳細が外部に漏れることは望ましくありません。もう 1 つの例は、値コンストラクターです。これは、健全性チェックやデフォルト引数などを使用する方法がないためです。これを克服するには、モジュール内でのみ使用し、便利で安全な初期化関数を外部に提供します。

于 2011-01-12T13:55:16.180 に答える
6

あなたの 2 番目の例はほとんどそこにあり()ますMain。これは、モジュールのエクスポート リストであり、空にしました (括弧の間には何もありません)。そのため、表示されmainません (エクスポートされないため)。

メインをエクスポートすることもできます:

module Main (main) where
于 2011-01-12T10:24:56.140 に答える