2012-06-20 6 views
24

Haskell 98仕様では、プログラムのエントリポイント、つまり関数mainは、慣例によりMainというモジュールに存在するはずです。しかし、ファイルの先頭にmodule Main whereを書き込まなくても、mainを書き込むと、GHCを使用しているときにソースコードがコンパイルされ、正しく動作しているように見えます。Haskellで `module Main where`を書き込むかどうかを指定します。

質問です:

  1. module Main whereを書いて、それを書いていないの違いは何ですか?
  2. どちらがお勧めですか?

答えて

22

実際には違いはありません。module Main (main) whereは、自分でヘッダを指定しないと暗黙の定義になります。 Haskell 98 Reportから:

のモジュールのみ本体からなるモジュールの省略形は、許可されています。これを使用すると、ヘッダは となり、module Main(main) whereとなります。

明示的な定義を暗黙的に定義することをお勧めしますが、Main.hsの場合はマイナーな設定です。

+8

違いは、モジュールヘッダーなしでは、 'main'だけがエクスポートされますが、' module Main where'はすべてのトップレベル定義がエクスポートされるということです。 )あなたの目は 'main(main)module'がどこにエクスポートリストが存在しないかを見ていたようです) –

+4

エクスポートリストを'(main) 'にすることは重要です。 – augustss

+0

@DanielFischer @augustss私はそれをサポートするためのドキュメントを見つけることができません。 GHCは、実行可能ファイルを作成する際にその区別をしていないようです。 'module Main(main) 'と' module Main(main)'は同じ最適化とリンクをしているようです。 – jdeseno

関連する問題