"模块[...]在多个文件中定义"来自Haskell编译的错误

时间:2018-03-17 13:31:47

标签: haskell ghc

使用-Wall选项进行编译时出现以下错误。

ghc -o -Wall polycake polycake.hs

当我不使用该选项时,我的代码编译正常并按预期运行。这是什么意思?

<no location info>: error:
    module ‘main:Polycake’ is defined in multiple files: polycake.hs
                                                         polycake.hs

1 个答案:

答案 0 :(得分:8)

-o选项期望输出文件名作为下一个参数 - 它不关心该参数是否以短划线开头。因此-o -Wall将输出文件名设置为-Wall(并且实际上不启用警告)。

所以剩下的两个参数是polycakepolycake.hsghc解释为输入文件名。如果输入文件名不存在且尚未以.hs扩展名结尾,ghc将尝试添加该扩展名。因此ghc polycake polycake.hs会尝试两次编译polycake.hs。这会导致您的错误。

PS:输出文件名默认为没有扩展名的输入文件名,因此在这种情况下你根本不需要-o选项。