假设我想修补几个相互依赖并运行的破解包
stack unpack foo-1.2.0
和
stack unpack bar-1.0.0
bar依赖于foo的地方。
现在,为了使用修改后的bar构建修改后的foo,我在bar.cabal中指定
build-depends:
foo == 1.2.0并添加到我的bar的stack.yaml中
packages:
- .
- rel/path/to/foo-1.2.0/这是可行的,而且构建得很好,但似乎如果bar的依赖项,比如some-package,本身依赖于foo,那么它将默认使用黑客版本,而不是使用我的修改版本进行编译,尽管我的修改版本满足版本限制。在构建过程中,有没有办法强制链条上的其他依赖项使用我的包的本地版本?我很欣赏这是一个非常不寻常的用例。
奇怪的是,我可以很好地构建,但是尝试加载到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`发布于 2021-02-11 16:12:50
根据Cabal User Guide的说法,在开发具有多个local packages的project时
本地包、以及外部包...它们依赖于,都是原地构建的,这意味着它们总是专门为项目构建的,而不是全局安装的。
因此,即使是外部包(即来自Hackage或其他包存储库的包)也将使用本地包,代价是需要为当前项目重新构建。
https://stackoverflow.com/questions/66150705
复制相似问题