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

Jak*_*lin 3 haskell ghc

当我使用-Wall选项编译时,我收到以下错误.

ghc -o -Wall polycake polycake.hs
Run Code Online (Sandbox Code Playgroud)

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

<no location info>: error:
    module ‘main:Polycake’ is defined in multiple files: polycake.hs
                                                         polycake.hs
Run Code Online (Sandbox Code Playgroud)

sep*_*p2k 8

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

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

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