首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何指示cabal-install或stack使用本地版本的黑客包?

如何指示cabal-install或stack使用本地版本的黑客包?
EN

Stack Overflow用户
提问于 2021-02-11 15:51:39
回答 1查看 114关注 0票数 3

假设我想修补几个相互依赖并运行的破解包

stack unpack foo-1.2.0

stack unpack bar-1.0.0

bar依赖于foo的地方。

现在,为了使用修改后的bar构建修改后的foo,我在bar.cabal中指定

代码语言:javascript
复制
build-depends:

  foo == 1.2.0

并添加到我的barstack.yaml

代码语言:javascript
复制
packages:
  - .
  - rel/path/to/foo-1.2.0/

这是可行的,而且构建得很好,但似乎如果bar的依赖项,比如some-package,本身依赖于foo,那么它将默认使用黑客版本,而不是使用我的修改版本进行编译,尽管我的修改版本满足版本限制。在构建过程中,有没有办法强制链条上的其他依赖项使用我的包的本地版本?我很欣赏这是一个非常不寻常的用例。

奇怪的是,我可以很好地构建,但是尝试加载到stack ghci失败了,如下所示:

代码语言:javascript
复制
Couldn't match type `foo-1.2.0:Some.Type.InFoo.aDataType`
               with `aDataType`
NB:    `aDataType` is defined at
       `full/path/to/foo-1.2.0/Some/Type/InFoo.hs:(23,1)-(28-60)`
       `foo-1.2.0:Some.Type.InFoo.aDataType`
         is defined in `Some.Type.InFoo`
            in package `foo-1.2.0`
       Expected type: `aDataType`
       Actual type: `foo-1.2.0:Some.Type.InFoo.aDataType`
EN

回答 1

Stack Overflow用户

发布于 2021-02-11 16:12:50

根据Cabal User Guide的说法,在开发具有多个local packagesproject

本地包、以及外部包...它们依赖于,都是原地构建的,这意味着它们总是专门为项目构建的,而不是全局安装的。

因此,即使是外部包(即来自Hackage或其他包存储库的包)也将使用本地包,代价是需要为当前项目重新构建。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66150705

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档