在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转换器和类)
lift
和liftIO
与ListT
一起使用,因为它是只有这些变换器类的实例-0.2.x 我想应用程序应该总是设置上限,以便它们永远不会中断,所以这个问题只是关于库:
我是否可以使用依赖项的上限版本?
答案 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。
我没有看到任何关于此的真实讨论,并且除了基本包之外似乎没有使用上限的一般建议。