首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >新模板与stack.yaml的区别

新模板与stack.yaml的区别
EN

Stack Overflow用户
提问于 2015-07-23 11:44:50
回答 2查看 425关注 0票数 5

我想在我的新Haskell项目中使用reactive-banana。我以前从未使用过阴谋-安装stack。我使用stack new在其中创建了一个目录并初始化了项目文件。我现在在目录中看到两个文件:new-template.cabalstack.yaml

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

起初,我试图在stack.yaml中添加stack.yaml中的extra-deps:,但是stack buildstack solver都没有下载它。然后,我在new-template.cabal中扩展了一个名为new-template.cabal的部分:

代码语言:javascript
复制
library
  hs-source-dirs:      src
  exposed-modules:     Lib
  build-depends:       base >= 4.7 && < 5
                     , reactive-banana >= 0.8
  default-language:    Haskell2010

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

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-07-23 12:12:27

在使用stack时,我通常不会在.cabal文件中设置任何版本限制。我让resolverextra-deps设置在stack.yaml文件中决定要选择哪个版本的包。

下面是一个stack.yaml文件,它引入了反应性香蕉-0.8.1.2:

代码语言:javascript
复制
flags: {}
packages:
- '.'
extra-deps:
- reactive-banana-0.8.1.2
- psqueues-0.2.0.2
resolver: lts-2.17

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

代码语言:javascript
复制
  build-depends:       base >= 4.7 && < 5, reactive-banana

反应性香蕉版本由stack.yaml文件固定.

如果您想使用GHC7.10,请将解析器更改为类似于nightly-2015-06-17的内容。

我迭代地确定extra-deps,只运行stack build并向stack.yaml文件添加缺少的任何依赖项,直到满足所有依赖关系为止。

您只需要在不像堆垛一样的反应性香蕉中的包中执行此操作。很多常用的包都在堆栈中,它们的版本将由resolver设置来决定。

票数 5
EN

Stack Overflow用户

发布于 2015-07-23 12:13:22

在默认配置中,堆栈可以处理两个包数据库:一个集中式的每个用户数据库和一个特定于项目的数据库。集中化的数据库只从堆垛中提取包,这是一种带有已知的兼容包的Hackage的子集,而您可以将您想要的任何东西放到特定于项目的数据库中。您使用的所有包都必须在阴谋文件中,但是那些没有堆叠的包(也就是那些将进入特定于项目的数据库的包)也必须在stack.yaml的外挂部分中列出。reactive-banana没有堆叠,所以您需要将它添加到stack.yaml中,如下所示:

代码语言:javascript
复制
# etc.
extra-deps:
- reactive-banana-0.8.1.2
# etc.

stack solver可以为您填充stack.yaml中的额外依赖项。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31586397

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档