有没有一种方法(标志或技巧)可以使 GHC 接受一个主模块,其中主函数的签名不是 IO ()
?对于 Fay,主函数的类型为 Fay ()
,但如果模块是 Main(或模块名称被省略),GHC 将不接受它。
该程序的入口点必须具有某个类型 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 看来作为入口点。
Main.main
的情况,因为我们使用类型Fay()
,而不是 IO monad。 - Adam Bergmarkdummy :: IO()
并使用-main-is Main.dummy
编译。这将使主函数成为一个无操作的函数,并成功编译。 - Daniel Fischer