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

Ale*_*oft 14 haskell program-entry-point

我写了一个简单的模块叫做Test:

module Test (main) where

main =
  putStrLn "Hello"
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试通过以下命令行编译它时:

ghc Test.hs -o my-program
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

[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.
Run Code Online (Sandbox Code Playgroud)

Wil*_*sem 24

ghc将假设它main位于一个被调用的模块中Main(就像编译器所说的那样).

ghc但是有一个选项-main-is,您可以在其中指定main函数所在模块的名称.所以你可以编译:

ghc -main-is Test Test.hs -o my-program
Run Code Online (Sandbox Code Playgroud)

  • 在使用`stack`并尝试在`package.yaml`中添加第二个可执行文件并使用`main:App.hs`时,这个答案也很有用.`stack build`将失败,错误与此帖的标题相同,后者在这里买了我:).因此解决方案是在`ghc-options`部分添加`--main-is App`.只是为了分享以防有人和我一样来到这里. (6认同)
  • 如果没有得到尊重,在cabal文件中有一个`main-is`部分有什么意义? (4认同)

小智 7

我有同样的问题,但就我而言,是通过在测试源文件中添加模块名称引起的test/Spec.hs

module Tests where

main :: IO ()
main = hspec $ do ...
Run Code Online (Sandbox Code Playgroud)

解决方案只是删除第一行:

main :: IO ()
main = hspec $ do ...
Run Code Online (Sandbox Code Playgroud)

当您使用堆栈创建项目(例如)时,这也是默认设置stack new myproject