我一直在尝试从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
你如何解决这样的错误?
答案 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 */
和NoImplicitPrelude
。 former阻止Haskell导入其中一个Prelude,这会失败。 second extension允许指定包和导入模块的版本:
import“base”Prelude
或
import“haskell98”Prelude