我有一个具有这种结构的项目:
foo.cabal
src/
Foo/
Main.hs
和foo.cabal的一部分看起来像这样:
executable foo
main-is: Foo/Main.hs
hs-source-dirs: src
Main.hs的包名为Foo.Main
。当我构建它时,cabal会编译所有内容,但不会创建可执行文件,因为它说没有主模块。
Warning: output was redirected with -o, but no output will be generated
because there is no Main module.
我做错了什么?
[编辑]如果我将Main向上移动并将foo.cabal更改为阅读main-is: Main.hs
则可行。那么我可以没有Main的嵌套模块名称吗?
答案 0 :(得分:9)
Main
模块必须调用Main
,而不是Foo.Main
或其他任何内容。如果您需要Foo.Main
,请将其中的main
重命名为defaultMain
,然后创建一个Main
的顶级imports Foo.Main (defaultMain)
模块并定义main = defaultMain
},例如:
src/
Foo/
Main.hs
Main.hs
foo.cabal
其中
-- src/Foo/Main.hs
module Foo.Main
( defaultMain
) where
defaultMain :: IO ()
defaultMain = putStrLn "Hello, world!"
和
-- src/Main.hs
module Main where
import Foo.Main (defaultMain)
main :: IO ()
main = defaultMain
或者,您可以保留Foo.Main.main
并将其导入合格。