5

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

于是我试了试,stack install wx提示我安装wxcore,提示我安装。在 I 之后,我尝试运行,但你瞧:wxcwxdirectstack install wxdirectstack 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

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

4

1 回答 1

9

stack 和 cabal install 之间的区别在于 stack 需要一个精选的(包、版本)列表。结果是堆栈将确保那些版本的那些包都可以编译并且是愉快的。不过,wxdirect 似乎还没有在精选列表中。您应该使用 stackage 提交 PR,这是一件好事,因为它也可以为其他用户解决此问题。

您还可以采用最后几行中给出的建议:

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 install 会默默地做的事情),你会遇到这个。这是 stack 和 cabal install 之间的区别之一,但这是一个很好的区别:cabal 安装包只是将其放入全局数据库中。在需要更新软件包之前,这很好。使用堆栈,您总是在一个项目中。如果您使用 stack.yaml 在项目外部运行堆栈,堆栈将咨询您的~/.stack/global/stack.yaml. 只需将额外的部分粘贴在那里。

它不会建立

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

它仍然不会建立

您可能必须尝试使用​​旧版本的 wxdirect。Stackage 包有时(但不是通常)落后于每个包的最后一个版本。

它仍然不会建立

您可能遇到了堆栈问题。我以前见过堆栈错误。你也可以在IRC 频道上提问。如果这不起作用,只需在 /r/haskell 上对 Edward Kmett 进行獾,他会用数学解决它。

于 2015-11-30T23:33:48.713 回答