由于没有主模块,因此不会生成任何输出

时间:2017-10-23 17:28:54

标签: haskell main

我写了一个名为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.

2 个答案:

答案 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)时的默认设置。