haskell - Cabal 中的包版本控制冲突

标签 haskell cabal

如果这是常见问题解答,请原谅我,但我对如何正确解决此问题感到有点困惑。

我最近下载了软件包TagSoup最新版本0.12.2安装得很好

然后我安装了包download-curl最新版本安装得很好。我没有意识到的是,download-curl 依赖于版本 =< 0.11 的 TagSoup,因此作为安装过程的一部分,Cabal 也下载了旧版本的 TagSoup。

这是一个问题,因为我想使用这两个库(最新版本的 TagSoup 和 download-curl) - 当你出于某种原因这样做时,GHCI 会变得有点困惑。

我的问题是,有没有办法在导入语句中指定版本,即

import Text.Html.TagSoup-0.12.2

或者这是不行的吗?我想不是。

解决这个问题的唯一方法是下载 download-curl 源代码,修改 .cabal 文件以使用 TagSoup-0.12.2 并使用我的小“hack”重新安装该包正如我所期望的那样 - 但我不认为这是解决方案

如有任何帮助,我们将不胜感激

最佳答案

通常在 .cabal 文件中指定所需的版本。对于特定的包导入( -XPackageImports )有一个扩展语法,但通常最好让 Cabal 处理。

也就是说,是的,如果您需要同时使用两者,那么您就进入了钻石依赖性的黑暗领域。您的解决方案几乎是当前唯一可用的解决方案。 -XPackageImports 在这里不是一个好主意,因为尝试在同一程序中使用同一库的两个版本可能不会链接,并且几乎肯定会在运行时转储核心如果它确实能够在没有重复符号的情况下进行链接。

关于haskell - Cabal 中的包版本控制冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6526353/

相关文章:

haskell - 依赖于台架测试

haskell - Cabal 在使用 alex 构建时尝试构建未知包,在 nix-shell 中很开心

Haskell cabal+hsc2hs

haskell - Haskell 中的多态类型族实例

haskell - 哪些软件包被硬连线到 GHC 中?

haskell - 在 monad 之后学习 Haskell 的下一步是什么?

haskell - 对 lambda 的这种用法感到困惑

haskell - 无法安装 Cabal-1.20.0.2

haskell - IO值转换为Haskell函数

haskell - Vim 的 Haskell 语法高亮是否损坏?