如何使用Stack更新.cabal文件?

4

我有一个使用Stack创建的旧项目。我想将我的项目迁移到最新的Stackage LTS集。

当我在stack.yaml文件中更改解析器时,问题是.cabal文件中extra-deps中的版本仍然是旧的LTS集。是否有一种方法可以使用Stack自动更新.cabal文件中的版本号?


如果你正在使用Stack,为什么cabal文件中还要有版本号呢?(我自己也是Haskell新手,所以这是一个真正的问题,而不是批评) - Chris Martin
1
@ChrisMartin 如果你想将一个项目打包成库,它需要在 cabal 文件中具有正确的依赖范围。 - sclv
我认为在.cabal文件中附带无限制的依赖库是可以的,只要同时附带一个stack.yaml文件。如果您通过Stackage分发软件包,则构建服务器将继续编译您的项目并检查错误。这很好。 (而且,限制依赖关系本身也存在问题。) - hao
@haoformayor 发布具有完全无限制依赖项的软件包被认为是非常不好的做法。错误检查仅针对最新的 stackage 范围进行。对于其他所有人,包括可能固定在较旧的 stackage 版本上的人来说,该软件包几乎无法使用。建议 所有 hackage 软件包都使用软件包版本策略。由于 stackage 上的库是 hackage 的子集,因此它们也不例外。 - sclv
软件包已经变得无法使用了;有很多关于无法构建旧软件包的人的SO帖子。整个东西,无论是bound还是stackage,都是半成品。 - hao
抛开你个人对技术是否半成品的看法,政策规定应该对分享给全世界的软件包进行限制。 - sclv
1个回答

0

你可以简单地删除 cabal 文件中 build-depends 的(某些)(上限)边界。

在分发软件包时,如果使用 --pvp-bounds 标志,stack 可以自动添加依赖关系的边界,例如:stack sdist --pvp-bounds upperstack upload --pvp-bounds both 等。

这个功能有一篇 Michael Snoyman 的博客文章


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接