我想在我的新Haskell项目中使用reactive-banana。我以前从未使用过阴谋-安装或stack。我使用stack new在其中创建了一个目录并初始化了项目文件。我现在在目录中看到两个文件:new-template.cabal和stack.yaml。
如何设置依赖项并确保它们被下载和编译?
起初,我试图在stack.yaml中添加stack.yaml中的extra-deps:,但是stack build和stack solver都没有下载它。然后,我在new-template.cabal中扩展了一个名为new-template.cabal的部分:
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开发人员的工作流程是什么?
发布于 2015-07-23 12:12:27
在使用stack时,我通常不会在.cabal文件中设置任何版本限制。我让resolver和extra-deps设置在stack.yaml文件中决定要选择哪个版本的包。
下面是一个stack.yaml文件,它引入了反应性香蕉-0.8.1.2:
flags: {}
packages:
- '.'
extra-deps:
- reactive-banana-0.8.1.2
- psqueues-0.2.0.2
resolver: lts-2.17在我的.cabal文件中,我只有:
build-depends: base >= 4.7 && < 5, reactive-banana反应性香蕉版本由stack.yaml文件固定.
如果您想使用GHC7.10,请将解析器更改为类似于nightly-2015-06-17的内容。
我迭代地确定extra-deps,只运行stack build并向stack.yaml文件添加缺少的任何依赖项,直到满足所有依赖关系为止。
您只需要在不像堆垛一样的反应性香蕉中的包中执行此操作。很多常用的包都在堆栈中,它们的版本将由resolver设置来决定。
发布于 2015-07-23 12:13:22
在默认配置中,堆栈可以处理两个包数据库:一个集中式的每个用户数据库和一个特定于项目的数据库。集中化的数据库只从堆垛中提取包,这是一种带有已知的兼容包的Hackage的子集,而您可以将您想要的任何东西放到特定于项目的数据库中。您使用的所有包都必须在阴谋文件中,但是那些没有堆叠的包(也就是那些将进入特定于项目的数据库的包)也必须在stack.yaml的外挂部分中列出。reactive-banana没有堆叠,所以您需要将它添加到stack.yaml中,如下所示:
# etc.
extra-deps:
- reactive-banana-0.8.1.2
# etc.stack solver可以为您填充stack.yaml中的额外依赖项。
https://stackoverflow.com/questions/31586397
复制相似问题