2012-06-20 54 views
24

Haskell 98規範說明了程序的入口點,即函數main,應該按照慣例駐留在稱爲Main的模塊中。但是,即使您不在編寫main的文件頂部寫入module Main where,在使用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'導出每個頂層定義。似乎你的眼睛看到'module Main(main)where''沒有導出列表存在;) –

+4

導出列表'(main)'很重要,因爲它允許編譯器優化更多。 – augustss

+0

@DanielFischer @augustss我找不到任何文檔來支持。在構建可執行文件時,GHC似乎沒有這樣做;它似乎也做'相同的優化和鏈接'module Main(main)where'作爲'module Main where'。 – jdeseno

相關問題