2012-10-03 24 views
4

有什麼方法(標誌或黑客)讓GHC接受主功能的簽名不是IO()的主模塊?對於Fay,主要功能的類型爲Fay(),但如果模塊爲Main(或模塊名稱被忽略),GHC不接受此選項。使GHC接受主功能不是IO的主模塊()

+0

這個問題應該解決什麼問題?你關心安全嗎? –

+1

問題是我們使用GHC進行類型檢查,除了'Main.main'情況下,我們使用類型'Fay()',因爲我們沒有IO monad,所以它工作正常。 –

+11

你可以插入'dummy :: IO()'並用'-main-Main.dummy'編譯。 –

回答

9

對於某些a,程序的入口點必須具有類型IO a,據我所知,沒有辦法使GHC接受其他類型(不修改其源代碼)。

默認情況下,入口點是Main.main,但您可以使用帶有GHC的-main-is標誌指定不同的操作作爲入口點。一般形式爲

ghc -main-is Module.action ModuleThatImportsEverything.hs -o programme 

可以省略Module的一部分,如果該模塊是Main

ghc -main-is action ModuleThatImportsEverything.hs -o programme 

action部分,如果它的名字是main

ghc -main-is Module ModuleThatImportsEverything.hs -o programme 

相當於到-main-is Module.main

對於您的情況,您可以向Main模塊或虛擬模塊添加虛擬動作 - 當然需要從Main模塊導入(直接或間接)到程序以作爲條目駐留就GHC而言。