如果这是常见问题解答,请原谅我,但我对如何正确解决此问题感到有点困惑。
我最近下载了软件包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/