24
Haskell 98規範說明了程序的入口點,即函數main
,應該按照慣例駐留在稱爲Main的模塊中。但是,即使您不在編寫main
的文件頂部寫入module Main where
,在使用GHC時源代碼也會編譯並顯示正常工作。在Haskell中編寫或不編寫`module Main where`
的問題是:
- 有什麼寫作
module Main where
,而不是寫它的區別? - 哪一個是首選?
Haskell 98規範說明了程序的入口點,即函數main
,應該按照慣例駐留在稱爲Main的模塊中。但是,即使您不在編寫main
的文件頂部寫入module Main where
,在使用GHC時源代碼也會編譯並顯示正常工作。在Haskell中編寫或不編寫`module Main where`
的問題是:
module Main where
,而不是寫它的區別?沒有真正的區別,module Main (main) where
將是你自己沒有指定頭部時的隱式定義。從Haskell 98 Report:
模塊的縮寫形式,僅由 模塊體,是允許的。如果使用這種方式,則標頭被假定爲 爲
module Main(main) where
。
我寧願明確定義一個隱式定義,但對於Main.hs
這是一個次要的優先選擇。
不同之處在於,如果沒有模塊頭文件,只導出'main',但使用'module Main where'導出每個頂層定義。似乎你的眼睛看到'module Main(main)where''沒有導出列表存在;) –
導出列表'(main)'很重要,因爲它允許編譯器優化更多。 – augustss
@DanielFischer @augustss我找不到任何文檔來支持。在構建可執行文件時,GHC似乎沒有這樣做;它似乎也做'相同的優化和鏈接'module Main(main)where'作爲'module Main where'。 – jdeseno