new-template.cabal和stack.yaml之间的区别

Mir*_*lov 5 haskell cabal haskell-stack

我想reactive-banana在我的新Haskell项目中使用.我从来没有使用过小集团安装stack之前.我使用创建了一个目录并初始化了项目文件stack new.我现在看到目录中有2个文件:new-template.cabalstack.yaml.

如何设置依赖项并确保它们已下载和编译?

起初,我试图添加- reactive-banana-0.8.0.2stack.yamlextra-deps:,但两者stack buildstack solver没有下载.然后,我增加了一个名为部分librarynew-template.cabal此:

library
  hs-source-dirs:      src
  exposed-modules:     Lib
  build-depends:       base >= 4.7 && < 5
                     , reactive-banana >= 0.8
  default-language:    Haskell2010
Run Code Online (Sandbox Code Playgroud)

每次我试图运行时stack build,它都会出现错误并建议将一些软件包添加到stack.yaml下面extra-deps:,这种情况发生了三次,直到最后安装了所有软件包,并且我可以在stack ghciREPL中导入它们.

所以我的问题是,使用的惯用方法是什么stack?我应该使用这两个文件中的哪一个来指定依赖项和其他项目元数据?普通Haskell开发人员的示例工作流程是stack什么?

Eri*_*ikR 5

使用时stack我通常不会在我的.cabal文件中放置任何版本的边界.我让文件中的resolverextra-deps设置stack.yaml确定要选择的软件包版本.

这是一个stack.yaml引入reactive-banana-0.8.1.2的文件:

flags: {}
packages:
- '.'
extra-deps:
- reactive-banana-0.8.1.2
- psqueues-0.2.0.2
resolver: lts-2.17
Run Code Online (Sandbox Code Playgroud)

在我的.cabal文件中我只有:

  build-depends:       base >= 4.7 && < 5, reactive-banana
Run Code Online (Sandbox Code Playgroud)

reactive-banana版本由stack.yaml文件固定.

如果你想使用GHC 7.10将解析器更改为类似的东西nightly-2015-06-17.

extra-deps通过运行stack build并添加stack.yaml文件中缺少的任何依赖项来迭代地确定迭代,直到满足所有依赖项.

您只需要使用不在Stackage中的软件包(例如reactive-banana).Stackage中有许多常用的软件包,它们的版本将由设置决定resolver.