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

all*_*win 4 haskell wxhaskell cabal cabal-install haskell-stack

所以我正在尝试使用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
Run Code Online (Sandbox Code Playgroud)

总之,我试图用stackcabal-install.而且我不确定为什么这是错的.如果它是错的,那么stack和之间的区别是cabal-install什么?

hao*_*hao 6

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

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

Recommended action: try adding the following to your extra-deps in {project root}/stack.yaml
- wxdirect-0.92.1.0
Run Code Online (Sandbox Code Playgroud)

并修改您的stack.yaml文件.更改默认值

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

extra-deps:
- wxdirect-0.92.1.0
Run Code Online (Sandbox Code Playgroud)

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

您可能仍会遇到以下问题.

我没有stack.yaml

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

它不会建立

确保您栈升级,您使用的是最新的LTS版本resolver:,在另一个领域stack.yaml.这可确保您拥有最新的策展.

它仍然不会建立

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

它仍然不会建立

您可能遇到了堆栈问题.我以前见过堆栈错误.您也可以在IRC频道上询问.如果这不起作用,只需要在/ r/haskell上诋毁Edward Kmett,他就会用数学来解决它.