Haskell编译报错:模块‘main:Polycake’多文件定义问题咨询
问题原因与解决办法
这个问题其实是命令参数顺序搞错了,跟-Wall本身没关系,只是刚好加了这个选项才暴露出来而已。
你看你写的命令:
ghc -o -Wall polycake polycake.hs
这里-o是指定输出可执行文件的选项,它后面必须紧跟输出文件名。但你把-Wall放在了-o后面,GHC就会把-Wall当成你要生成的输出文件名,然后后面的polycake和polycake.hs都被当成了要编译的输入文件——这就等于你让GHC编译同一个文件两次(polycake其实是GHC默认会找对应的.hs文件,也就是polycake.hs),所以才会报错说模块在多个文件里定义。
而你不加-Wall的时候,应该是用了正确的参数顺序,比如ghc -o polycake polycake.hs或者直接ghc polycake.hs,这时候GHC只会处理一次polycake.hs,自然不会报错。
正确的命令应该是这样:
把-Wall放在-o前面(或者输出文件名之后,只要不跟在-o后面就行):
ghc -Wall -o polycake polycake.hs
或者:
ghc -o polycake -Wall polycake.hs
这样GHC就能正确识别:-Wall是开启警告的选项,-o polycake指定输出文件为polycake,最后polycake.hs是要编译的源文件,就不会再出现重复模块的错误了。
内容的提问来源于stack exchange,提问作者Jake McLaughlin
相关产品推荐
相关产品推荐

