为什么Stack无法识别刚刚安装的依赖项?

时间:2015-11-30 23:16:17

标签: haskell cabal cabal-install haskell-stack wxhaskell

所以我正在尝试使用reactive-banana + wxHaskell进行GUI编程。作为Haskell及其开发工具的新手,我对堆栈感到非常困惑。

所以我尝试stack install wx,提示我安装wxcore,这会提示我安装wxcwxdirect。在我stack install wxdirect之后,我尝试运行stack install wxc,但是请注意:

While constructing the BuildPlan the following exceptions were encountered:

--  Failure when adding dependencies:    
  wxdirect: needed (>=0.90.1.1), not present in build plan (latest is 0.92.1.0)
needed for package: wxc-0.92.1.1

--  While attempting to add dependency,
Could not find package wxdirect in known packages

Recommended action: try adding the following to your extra-deps in {project root}/stack.yaml
- wxdirect-0.92.1.0

简而言之,我正在尝试使用stack cabal-install。而且我不确定为什么这是错的。如果它是错的,那么stackcabal-install之间有什么区别?

1 个答案:

答案 0 :(得分:6)

堆栈和cabal安装之间的区别在于堆栈需要精选的(包,版本)列表。结果是堆栈将确保那些版本的那些包都将编译并且开朗。虽然wxdirect似乎不在策划列表中。你应该file a PR with stackage,这是一件好事,因为它也会为其他用户解决这个问题。

您还可以接受最后几行中给出的建议:

Recommended action: try adding the following to your extra-deps in {project root}/stack.yaml
- wxdirect-0.92.1.0

修改stack.yaml文件。更改默认

# Packages to be pulled from upstream that are not in the resolver (e.g., acme-missiles-0.3)
extra-deps: []

extra-deps:
- wxdirect-0.92.1.0

stack现在会尝试安装假装,就好像它(包,版本)已经进入策划列表一样。

但您可能仍会遇到以下问题。

我没有stack.yaml

如果你不在一个项目中(并且你想要将一个软件包堆栈安装到用户数据库,那么cabal安装会默默地进行),你会遇到这个问题。这是堆栈和cabal安装之间的差异之一,但它是一个很好的:cabal安装包只是将它放入全局数据库。在需要更新包之前,这很好。使用堆栈,您在项目中始终。如果使用stack.yaml在项目外部运行堆栈,堆栈将咨询您的~/.stack/global/stack.yaml。只需坚持那里的额外设施。

它不会构建

确保您在resolver:中使用最新的LTS版本进行堆叠升级,stack.yaml中的另一个字段。这可以确保您拥有最新的策展。

它仍然无法构建

您可能需要尝试旧版本的wxdirect。 Stackage包有时候,但通常不会落后于每个包的最后一个版本。

它仍然无法构建

您可能遇到了堆栈问题。我以前见过堆栈错误。您也可以在IRC channel上询问。如果这不起作用,只需要在/ r / haskell上写下顽固的爱德华·凯梅特,他就会用数学来解决它。