Haskell 告诉阴谋集团主模块在哪里

Haskell 告诉阴谋集团主模块在哪里,haskell,cabal,Haskell,Cabal,我有一个具有这种结构的项目: 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

我有一个具有这种结构的项目:

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指定嵌套模块名吗

必须调用
Main
模块
Main
,而不是
Foo.Main
或任何其他模块。如果需要
Foo.Main
,则将其中的
Main
重命名为类似
defaultMain
,然后制作一个顶级
Main
模块,该模块导入Foo.Main(defaultMain),并定义
Main=defaultMain
,例如:

src/
    Foo/
        Main.hs
    Main.hs
foo.cabal
在哪里


或者,您可以将其保留为
Foo.Main.Main
,然后只导入合格的文件。

@maxtaldykin感谢您的引用。如果模块导出
Main
,您可以在导入Foo.Main(Main)的位置编写
模块Main(无论是否显式导入
Main
-- 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