6

在 cabal 文件的依赖项部分:

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 transformer and class)

  • 如果我不设置限制 - 我的包裹可能会因“变压器”的变化而损坏
  • 如果我确实设置了限制 - 使用“转换器”但使用它的较新版本的用户将无法使用liftand liftIOwithListT因为它只是这些转换器类的一个实例-0.2.x

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

我是否应该对依赖项使用版本上限?

4

3 回答 3

4

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

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

于 2010-05-13T21:26:27.273 回答
2

考虑故障模式:

  • 使用上限,您的包构建或 cabal 对不满意的构建依赖关系喋喋不休。责任很明确。

  • 如果没有上限,客户将拥有最新版本的转换器,并且它不向后兼容。您的软件无法构建;GHC 喋喋不休地谈论您的代码如何无法编译。你的软件看起来很糟糕。

放入上限。

于 2010-05-13T01:30:32.250 回答
1

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

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

于 2010-05-13T00:31:57.973 回答