我可以以某种方式使用比包指定的版本更高的包吗?
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
.
我找到的两种解决方法之一
- 将
base
的特定版本添加到我的extra-deps
,确保固定版本在我的包允许的范围内;或
- 选择一个不同的解析器(例如使用 https://www.stackage.org/diff/ 来确定哪个是最新的解析器,具有足够早的
base
版本)
这两个感觉都不是最理想的,特别是因为我可能想使用具有非重叠范围的包(例如,一个 >=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.
我对 Haskell 堆栈很陌生,所以我可能误解了这里的工作原理,但我有一个问题我已经见过几次,想知道我是否我走错路了。
简而言之,有时我想使用版本规范上限为 base
低于我的 Stack 解析器包含的版本的包。
例如,我不能将lts-12.14
解析器与PSQueue-1.1
一起使用,因为前者包含base-4.11.1
而后者需要base >=4 && <4.11
.
我找到的两种解决方法之一
- 将
base
的特定版本添加到我的extra-deps
,确保固定版本在我的包允许的范围内;或 - 选择一个不同的解析器(例如使用 https://www.stackage.org/diff/ 来确定哪个是最新的解析器,具有足够早的
base
版本)
这两个感觉都不是最理想的,特别是因为我可能想使用具有非重叠范围的包(例如,一个 >=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.