由于含糊不清的Prelude,无法建立阴谋套餐

时间:2012-03-28 18:10:33

标签: haskell build-process cabal

我一直在尝试从cabal安装BNF converter,但是构建它时存在问题。显然,这个软件包使用了haskell98和基础版本4. *的混合模块。这提出了一个问题,如果您使用haskell98进行编译隐藏,则找不到某些模块。但是,如果你使用haskell98进行编译,那么ghc无法判断它是否应该使用新的Prelude或者haskell98 Prelude!

错误消息:

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

你如何解决这样的错误?

2 个答案:

答案 0 :(得分:7)

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

这是因为haskell98是一个兼容包,它复制其他模块中的函数。新代码不应该依赖它,除非它意味着与Haskell-98兼容。然而,这种变化是相对较新的,并且许多旧代码都引用了“base”和“haskell98”,尽管它实际上并没有使用“haskell98”包。

在短期内,我会运行cabal unpack BNFC,然后编辑“.cabal”文件,并从“build-depends:”字段中删除对haskell98的引用。我还会碰到一个库的版本号(这一步与可执行文件无关)。然后从刚编辑的本地副本构建和安装。如果BNFC意图使用mtl版本1,可能还有其他问题,但如果需要,您可以自己添加该约束。

答案 1 :(得分:1)

解决方法是使用语言扩展程序#import <Foundation/Foundation.h> #ifndef BRIDGING_HEADER #define BRIDGING_HEADER #import <UIKit/UIKit.h> #import "UnityUtils.h" #import "UnityAppController.h" #import "UnityInterface.h" #endif /* BRIDGING_HEADER */ NoImplicitPreludeformer阻止Haskell导入其中一个Prelude,这会失败。 second extension允许指定包和导入模块的版本:

  

import“base”Prelude

  

import“haskell98”Prelude