是否所有Haskell软件包都相互兼容



我看到这里列出了很多Haskell软件包:

http://hackage.haskell.org/packages/archive/pkg-list.html#cat:database

所有这些软件包是否相互兼容?如果我带10个包来制作一个程序,它们都会没问题吗?如果我带来了页面上列出的所有包裹怎么办?

想象一下,如果你在Java中,如果你从网络上引入10个jar,JAR之间可能存在依赖关系,这意味着一个JAR需要一个版本,另一个JAR不是另一个JAR的好版本。例如,一个 JAR 可能需要 Hibernate 版本 3.0.0,另一个 JAR 需要 Hibernate 2.0.0。所以我不能使用这两个jar,因为它们不使用共同的等同Hibernate版本。

你在Haskell中也有同样的问题,尽管正如所指出的,阴谋集团在以最佳方式解决依赖关系方面非常聪明。

陰謀集團會樂意安裝一個包的多個版本,但是這可能會在創建你自己的包時導致一個微妙的

錯誤:你的包可能間接依賴於多個版本(陰謀集團在做configure時警告你),這帶來了一個微妙的驚訝:當你間接(例如通過類型推解)引用一個類型時,比如說State, 它可能在一个地方解析为 MTL 1.x,在另一个地方解析为 mtl 2.x,并且两者无法统一。 当您使用两个包并希望将它们组合到代码中时,这将成为问题。 这很少是一个问题,但它是值得注意的。

另请注意,Haskell软件包通常依赖于版本范围而不是单个版本。 这意味着阴谋集团构建了接受版本的交集,并使用其中的最新版本。

不,但是

  1. 包都声明依赖项,包括版本范围
  2. 如果你使用阴谋集团安装,它将尽最大努力保持一切一致。 大多数时候它做得很好。 由于对旧版本的依赖,我一直无法构建软件,但我从未见过阴谋集团被愚弄的情况。 如果阴谋集团为你安装软件包,它将起作用;阴谋集团可能会为你安装软件包

最新更新