2011-01-12 14 views
8

今朝の悪いニュース、私はLekzahを使い続けています。haskell leksah hello-world

私は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 functionメイン' Main'

は、あなたが何かをしようとする私に何を助言するモジュールによってエクスポートされていませんか?

重要EDITは今Leksahは完全にfunctionnal Hello Worldのミニプロジェクトが含まれているファイルMain.hs、直接ロードあなたがleksahを初めて起動したとき、同梱されています。ミニマリストのユニットテストカウンタも持っています。初心者には嬉しいです :-)

答えて

15

paranthesis内のテキストをモジュール名は、エクスポートリストされた後。つまり、そこにエクスポートするプログラムにすべての機能を配置する必要があります。しかし、これとは別に、主な機能をどこかに定義しなければなりません。これを試してみてください:

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

PS:また、あなたのモジュールで何がエクスポートされようとしているよりも、そこにparanthesis、何を削除することができます。

+0

多すぎます! –

6

2つ目の例がほとんどあります。Mainの横にある()を削除してください。これはあなたのモジュールのためのあなたの輸出リストです。これはあなたが空にしたものです(カッコの間には何もありません)。そのため、mainは表示されません(エクスポートされていないため)。

また、単にメインエクスポートできます

module Main (main) where 
+0

すべてをエクスポートするのは良い方法ですか? –

+0

さて、ベストプラクティスが何であるかはっきりとは言えませんが、一般的には、私が結束モジュールを作ったという合理的な考えがあるときは、輸出を制限します。エクスポートの制限は、定義された一連の関数を使用して直接アクセスすることを望まないデータ型にとっては重要です。 – ScottWest

+1

また、anythigをエクスポートしないと、コンパイラは最適化を向上させることができます。 – fuz

6

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

関連する問題