我可以以某种方式使用包含更高版本的包而不是包指定的包吗?

Tom*_*han 5 haskell haskell-stack

我对Haskell堆栈很陌生,所以我可能误解了这里的工作原理,但我有一个问题,我已经看过几次了,我想知道我是否会走错路.

简而言之,我有时希望使用版本规格的软件包,其版本低于base我的Stack解析器所包含的版本.

例如,我不能使用lts-12.14 解析器PSQueue-1.1,因为前者包含base-4.11.1,后者需要base >=4 && <4.11.

我发现解决问题的两种方法都是

  • 添加特定版本的basemy extra-deps,确保固定版本在我的包允许的范围内; 要么
  • 选择一个不同的解析器(使用例如https://www.stackage.org/diff/来确定哪一个是具有早期版本的最新解析器base)

这两者都感觉不是最理想的,特别是因为我可能想要使用具有非重叠范围的包(例如一个>=3 && <4.11和一个>=4.11).我意识到使用这样的组合可能会失败,特别是如果它们被锁定在不同的主要版本base(假设base使用semver),但到目前为止我只编写非常小的程序,所以如果它们似乎工作我很即使存在其他未执行的代码路径,这些路径也会在包和版本的特定组合上失败.换句话说:我知道风险 - 但我不能机会,因为我不知道如何.

有没有办法强制Stack允许base比依赖项要求中指定的版本更新的版本?

tyl*_*eir 5

我想你正在寻找allow-newer- https://docs.haskellstack.org/en/stable/yaml_configuration/#allow-newer

忽略.cabal文件中的版本边界.默认值为false.

  • `stack ls dependencies`会告诉你你有什么.如果在cabal文件中添加特定版本,则应使用该版本.说实话,你要求头痛. (2认同)
  • 你可以做很多事情:1)等待库更新,2)将库固定到特定的git commit hash,3)将库代码作为本地依赖项(这可以让你保持一切稳定,只需验证)图书馆.).除非他们是GHC版本要求,否则你通常会好起来的. (2认同)