Haskell包版本控制策略 - 依赖关系的更改

时间:2013-05-30 02:27:58

标签: haskell cabal

假设我有libfoo。这取决于libbar。根据{{​​3}},我指定了

libbar ==0.1.*

在Build-depends中:在我的cabal文件中。

然后libbar的开发者发布了一个新版本,0.2。我测试它并没有影响libfoo的更改。所以我将Build-depends更改为

libbar ==0.2.*

或者也许

libbar >= 0.1 && < 0.3

虽然我可以想到不采用后一种方式的理由。这是我对libfoo的唯一更改。

libfoo导出接受libbar中定义的类型和libbar中定义的返回类型的函数。但是,对libbar的更改不会影响任何这些功能。

libfoo的第一个版本是0.1.0.0。第二版libfoo应该有什么版本号?

1 个答案:

答案 0 :(得分:6)

这取决于你从libbar重新导出的内容。

您是否重新导出libbar?

不太可能,但......

鉴于libbar已经将其主要数字从0.1更改为0.2,有些内容可能会破坏更改中的代码,如果您重新导出代码,那么的主要数字也会改变: 0.2.0.0

libbar 0.2是否声明新实例?

这是提防的目标。

您无法阻止跨模块边界泄漏的实例,并且新实例可能会破坏现有代码。这就是版本控制政策所说的原因

  

请注意,修改导入或依赖于另一个包的较新版本可能会导致导出额外的实例,从而强制进行主要版本更改。

如果libbar 2.0中有新实例,则 有一个新的主要版本: 0.2.0.0

否则

在这种情况下,您的代码不会更改。包版本控制策略的第2点不适用:

  
      
  1. 否则,如果只有新的绑定,类型,类或模块(但见下文)被添加到接口,则A.B可能保持不变,但新C必须大于旧C.
  2.   

基本原则是:

  

A.B.C唯一标识API。

您没有添加任何内容或更改导出的内容,因此您无需更改0.1.0的主要次要编号,但应更改最后一部分: 0.1.0.1 是正确的