stack:为什么对base有版本约束?



我的理解是,当使用stack来编译一个项目时,不应该在.cabal(或package.yaml)文件中添加依赖项的版本约束,因为解析器会为您选择特定的版本。这包括GHC版本及其基本库。但是,当使用stack new创建一个新项目时,它会自动向对base的依赖添加一个版本约束。

自动生成package.yaml的节选

dependencies:
- base >= 4.7 && < 5

为什么?

我不知道规范的答案。但这里有一个原因,为什么它可能是好的。

对于目前唯一现实的Haskell实现,即GHC,base版本和编译器版本是密不可分的。这意味着合适的base约束传达了打算使用哪个版本的编译器。

后一部分是可以一目了然地了解一个包的有趣信息。

现在,栈解析器和GHC版本也是不可分割地联系在一起的。所以你可能认为这些信息已经可用了。但是目前,Hackage(大多数Haskell包被托管供其他人使用的地方)显示了从cabal文件中获取的一堆信息,但没有从堆栈文件中获取的信息。因此,如果您希望从包的自动生成的Hackage摘要中方便地获取有关GHC版本的信息,这是一种轻松而自动地做到这一点的方法。

相关内容

  • 没有找到相关文章

最新更新