Haskell 包版本控制策略 - 依赖项的变化

标签 haskell cabal

假设我有 libfoo。这取决于 libbar。根据Package Versioning Policy , 我指定

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 的第二个版本应该有什么版本号?

最佳答案

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

您是否重新导出 libbar?

不太可能,但是....

鉴于 libbar 已将其主编号从 0.1 更改为 0.2,因此更改中可能会破坏代码,如果您将其批发重新导出,您的主编号也必须更改: 0.2.0.0

libbar 0.2 是否声明新实例?

这是的那个小心为了。

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

Note that modifying imports or depending on a newer version of another package may cause extra instances to be exported and thus force a major version change.



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

否则

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

  1. Otherwise, if only new bindings, types, classes or modules (but see below) were added to the interface, then A.B may remain the same but the new C must be greater than the old C.


一个基本原则是:

A.B.C uniquely identifies the API.



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

关于Haskell 包版本控制策略 - 依赖项的变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16827001/

相关文章:

haskell - 是否有用于编写词法分析器的 haskell EDSL?

haskell - Monad如何符合函数的组成

testing - Haskell IO 测试

haskell - 什么是 Cabal 组件以及如何使用它们?

haskell - 为什么 "cabal build"与 "make"相比这么慢?

haskell - IdentityT 变压器的用途是什么?

haskell - 如何创建合适的 .tar.gz 文件以用于 `cabal upload` ?

haskell - 我的 cabal 包是 FUBAR;我怎样才能清除它们并重新开始?

haskell - cabal 沙箱安装仍然失败,错误为 "packages are likely to be broken by the reinstalls"

haskell - 如何记住游戏树(潜在无限的玫瑰树)的重复子树?