封装版本冲突在Cabal中

时间:2011-06-29 19:47:19

标签: haskell cabal

请原谅我这是一个FAQ,但我对如何正确解决这个问题感到有点困惑。

我最近下载了使用最新版 0.12.2 安装好的软件包TagSoup

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

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

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

import Text.Html.TagSoup-0.12.2

还是不行?我在想不到。

我解决这个问题的唯一方法是下载下载curl源代码,修改.cabal文件以使用TagSoup-0.12.2并重新安装包裹,我的小“hack”就位会期待它 - 但我不认为这是解决方案

任何帮助将不胜感激

1 个答案:

答案 0 :(得分:4)

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

那说,是的,如果你需要同时使用它们,那么你进入钻石依赖的黑暗领域。你的几乎是目前唯一可用的解决方案。 -XPackageImports 这里不是一个好主意,因为尝试在同一个程序中使用同一个库的两个版本可能不会链接,并且几乎可以肯定会在运行时转储核心> 管理链接时没有重复的符号。