我可以以某种方式使用比包指定的版本更高的包吗?

Can I somehow use a package with a later version of base than what the package specifies?

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

简而言之,有时我想使用版本规范上限为 base 低于我的 Stack 解析器包含的版本的包。

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

我找到的两种解决方法之一

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

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

我认为您正在寻找 allow-newer - https://docs.haskellstack.org/en/stable/yaml_configuration/#allow-newer

Ignore version bounds in .cabal files. Default is false.