我写了一个名为Test
的简单模块:
module Test (main) where
main =
putStrLn "Hello"
但是,当我尝试通过以下命令行编译它时:
ghc Test.hs -o my-program
我收到以下错误:
[1 of 1] Compiling Test ( Test.hs, Test.o )
<no location info>: error:
output was redirected with -o, but no output will be generated because there is no Main module.
答案 0 :(得分:23)
ghc
将假设main
位于名为Main
的模块中(就像编译器所说的那样)。
ghc
但是有一个选项-main-is
,您可以在其中指定main
函数所在模块的名称。所以你可以编译:
ghc -main-is Test Test.hs -o my-program
答案 1 :(得分:5)
我遇到了同样的问题,但就我而言,是通过在测试源文件test/Spec.hs
中添加模块名称引起的:
module Tests where
main :: IO ()
main = hspec $ do ...
解决方案只是删除第一行:
main :: IO ()
main = hspec $ do ...
这也是创建带有堆栈的项目(例如stack new myproject
)时的默认设置。