使用具有额外deps的堆栈解算器时的Hackage名称冲突

时间:2016-12-08 09:48:57

标签: haskell packages cabal haskell-stack

事实证明我的应用名称与上传到hackage的其中一个软件包相同,所以当我尝试使用stack solver --resolver lts 7.12解析额外的依赖项时,我收到以下错误:

$ stack solver --resolver lts-7.12
Using configuration file: stack.yaml
Using cabal packages:
- html-parse.cabal

Using resolver: lts-7.12
Using compiler: ghc-8.0.1
Asking cabal to calculate a build plan...
Trying with packages from lts-7.12 as hard constraints...
Attempt failed.

>>>> Cabal errors begin
cabal.exe: Could not resolve dependencies:
next goal: html-parse (user goal)
rejecting: html-parse-0.2.0.0, 0.1.0.0 (global constraint requires ==0.0.0.3)
trying: html-parse-0.0.0.3
next goal: hunit (dependency of html-parse-0.0.0.3)
Dependency tree exhaustively searched.
<<<< Cabal errors end

Could not parse cabal-install errors:

>>>> Cabal errors begin
cabal.exe: Could not resolve dependencies:
next goal: html-parse (user goal)
rejecting: html-parse-0.2.0.0, 0.1.0.0 (global constraint requires ==0.0.0.3)
trying: html-parse-0.0.0.3
next goal: hunit (dependency of html-parse-0.0.0.3)
Dependency tree exhaustively searched.
<<<< Cabal errors end

.cabal文件中的我的应用/包名称为html-parse,当前版本为0.0.0.3。看起来我自己的包被列为具有约束==0.0.0.3的依赖项,但是有另一个关于hackage的pacakge具有相同的名称但不同的版本。

如果不重命名我自己的应用,我可以以某种方式解决此问题吗?

1 个答案:

答案 0 :(得分:0)

引用Cabal user guide(强调我的):

  

包名称和版本

     

所有包都有一个名称,例如“HUnit”。 假设包名称是唯一的。 Cabal包名称可以使用字母,数字和连字符,但不能使用空格。 Cabal软件包的命名空间是扁平的,而不是分层的。

因此, Cabal 库没有处理包名冲突的功能, cabal-install 堆栈也没有。既然如此,您将不得不重命名您的包裹。

PS:我故意不认真考虑设置你的项目使用排除同名包的private Hackage的可能性,因为我不知道它在实践中会如何发挥,因为它是比它值得多麻烦。