我一直在尝试从cabal安装BNF converter,但是构建它时出现问题。显然,此软件包混合使用了haskell98和base版本4. *中的模块。这就带来了一个问题,如果您使用隐藏的haskell98进行编译,则找不到某些模块。但是,如果使用haskell98 Prelude进行编译,则ghc无法确定它是否应该使用新的Prelude或haskell98 Prelude!

错误信息:

Main.hs:1:1:
    Ambiguous module name `Prelude':
    it was found in multiple packages: base haskell98-2.0.0.1


您如何解决这样的错误?

最佳答案

阻止维护者上载修复程序。或者,如果他们没有反应,请考虑自己接管维护。

这是因为haskell98是一个兼容软件包,可重复其他模块中的功能。除非新代码与Haskell-98兼容,否则不应该依赖它。但是,此更改是相对较新的,尽管它实际上并未使用“ haskell98”包,但许多较旧的代码同时引用了“ base”和“ haskell98”。

即时而言,我将运行cabal unpack BNFC,然后编辑“ .cabal”文件,并从“ build-depends:”字段中删除对haskell98的引用。我还会增加库的版本号(此步骤对可执行文件无关紧要)。然后从刚刚编辑的本地副本构建并安装。如果BNFC打算使用MTL版本1,可能还会有其他问题,但是如果需要,您可以自己添加该约束。

10-01 20:59