hackage包依赖项和面向未来的库

时间:2010-05-12 23:34:25

标签: haskell cabal hackage

在cabal文件的dependencies部分中:

Build-Depends: base >= 3 && < 5, transformers >= 0.2.0

我应该做什么

Build-Depends: base >= 3 && < 5, transformers >= 0.2.0 && < 0.3.0

(对我依赖的软件包版本设置上限)

是不是?

我将使用一个真实的例子:Hackage上的“List”包(List monad转换器和类)

  • 如果我没有限制 - 我的包裹可能因“变形金刚”的变化而破裂。
  • 如果我确实设置了限制 - 使用“变形金刚”但使用较新版本的用户将无法将liftliftIOListT一起使用,因为它是只有这些变换器类的实例-0.2.x

我想应用程序应该总是设置上限,以便它们永远不会中断,所以这个问题只是关于库:

我是否可以使用依赖项的上限版本?

3 个答案:

答案 0 :(得分:4)

有一个明确的policy推荐上限 - 特别参见第3节(“Cabal中的依赖关系”)。其他答案为这一政策提供了进一步的理由。

简而言之 - 上限应采用< A.(B+1)的形式,其中A和B是当前版本的第一个元素(A.B.C...)。这是因为增加A.B应该意味着该版本会破坏旧的API。

答案 1 :(得分:2)

考虑失败模式:

  • 使用上限,您的包构建或cabal咩咩关于不满意的构建依赖性。明确指责责任。

  • 没有上限,客户有最新版本的变压器,并且它不向后兼容。您的软件无法构建; GHC嘲笑你的代码如何编译。你的软件看起来很糟糕。

放入上限。

答案 2 :(得分:1)

IMO将接受的版本号置于上限是正确的做法。鉴于Hackage使用的版本号的语义,当然不能保证你的包可以使用,在这种情况下,变换器0.3.0。

我没有看到任何关于此的真实讨论,并且除了基本包之外似乎没有使用上限的一般建议。