依赖包编译报错要求启用语言扩展,如何为第三方依赖配置对应扩展?
问题原因
报错是因为你依赖的suitable-0.1.1包在定义SetConstraints数据构造器时使用了存在量化类型语法,但该包自身的配置中未声明启用ExistentialQuantification语言扩展,高版本GHC默认关闭该扩展,因此编译失败。
修复方案
方案1:在stack.yaml中为第三方包单独指定编译扩展
这是最简便的方法,不需要修改第三方包源码,直接在你的项目stack.yaml中添加针对suitable包的GHC编译选项即可:
ghc-options: # 为suitable包单独启用ExistentialQuantification扩展 suitable: -XExistentialQuantification
添加后重新执行stack build即可完成编译。
方案2:对suitable包打补丁
如果方案1不生效(比如包还存在其他扩展缺失问题),可以拉取suitable包源码本地修改后作为依赖:
- 下载
suitable-0.1.1的源码包到你的项目同级目录 - 两种修改方式二选一:
- 在源码的
src/Data/Suitable.hs文件头部添加语言扩展声明:{-# LANGUAGE ExistentialQuantification #-} - 或者修改suitable包的
.cabal/package.yaml文件,在default-extensions字段中添加ExistentialQuantification
- 在源码的
- 将
stack.yaml的extra-deps中原本的suitable-0.1.1替换为本地源码路径:extra-deps: - ./suitable-0.1.1 # 替换为你本地suitable包的实际路径 - containers-0.6.5.1 - rmonad-0.8.0.2 - 重新执行
stack build即可。
内容的提问来源于stack exchange,提问作者Xwtek
相关产品推荐
相关产品推荐

