事实证明我的应用名称与上传到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具有相同的名称但不同的版本。
如果不重命名我自己的应用,我可以以某种方式解决此问题吗?
答案 0 :(得分:0)
引用Cabal user guide(强调我的):
包名称和版本
所有包都有一个名称,例如“HUnit”。 假设包名称是唯一的。 Cabal包名称可以使用字母,数字和连字符,但不能使用空格。 Cabal软件包的命名空间是扁平的,而不是分层的。
因此, Cabal 库没有处理包名冲突的功能, cabal-install 和堆栈也没有。既然如此,您将不得不重命名您的包裹。
PS:我故意不认真考虑设置你的项目使用排除同名包的private Hackage的可能性,因为我不知道它在实践中会如何发挥,因为它是比它值得多麻烦。