gpt4 book ai didi

haskell - 我如何指示 cabal-install 或 stack 使用 hackage 包的本地版本?

转载 作者:行者123 更新时间:2023-12-04 17:21:13 24 4
gpt4 key购买 nike

假设我想修补一些相互依赖并运行的hackage包

堆栈解压 foo-1.2.0

stack unpack bar-1.0.0

bar 取决于 foo

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

build-depends:

foo == 1.2.0

并添加到我的 barstack.yaml:

packages:
- .
- rel/path/to/foo-1.2.0/

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

奇怪的是我能够很好地构建但是尝试加载到 stack ghci 失败并显示:

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`

最佳答案

根据Cabal User Guide , 在开发 project 时有几个local packages :

Local packages, as well as the external packages [...] which dependon them, are built inplace, meaning that they are always builtspecifically for the project and are not installed globally.

所以看起来即使是外部包(即来自 Hackage 或其他包存储库的包)也会使用本地包,代价是需要为当前项目重建。

关于haskell - 我如何指示 cabal-install 或 stack 使用 hackage 包的本地版本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66150705/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com