Abr*_*m P 27 haskell github dependency-management cabal haskell-stack
是否可以使用Haskell堆栈从github安装包的版本?
例如,在一个.cabal或一个stack.yaml文件中,如何在git repo/branch/revision中指向依赖?
R B*_*R B 24
该部分的文档stack.yaml packages提供了引用更复杂的包位置的示例.
Run Code Online (Sandbox Code Playgroud)packages: - location: . - location: dir1/dir2 - location: https://example.com/foo/bar/baz-0.0.2.tar.gz - location: http://github.com/yesodweb/wai/archive/2f8a8e1b771829f4a8a77c0111352ce45a14c30f.zip - location: git: git@github.com:commercialhaskell/stack.git commit: 6a86ee32e5b869a877151f74064572225e1a0398 - location: hg: https://example.com/hg/repo commit: da39a3ee5e6b4b0d3255bfef95601890afd80709
然后添加extra-dep: true到package条目只是为了告诉stack不要将它所引入的代码视为您正在开发的内容(例如,不要在GHCi中加载它).
PHP*_*ate 10
Stack> 1.7.1的新语法
作为@Flip评论说,在文档docs.haskellstack.org
澄清你的新的语法stack.yaml如下:
extra-deps:
- github: apolishch/prime_table
commit: a510622a824af999a809191e8c959b8ea5fa8bdb
- github: apolishch/reactive-banana
commit: 74bac0f86ed172f95bb6f6a31041992fc161cf79
subdirs: reactive-banana
Run Code Online (Sandbox Code Playgroud)
为了清楚stack.yaml起见:确保包中(不在Stackage中)可用的依赖项会使.cabal项目中的某个文件需要它们,以防万一.
您还必须在指定包的名称build-depends在你的.cabal文件说你实际上取决于封装.
请注意,提交的分支并不重要,repos可以是分支.当包在子目录中时,您可以指定它,否则它将默认为顶级.
Stack> 1.6.0的语法
extra-deps:
- github: git@github.com:apolishch/prime_table.git
commit: a510622a824af999a809191e8c959b8ea5fa8bdb
Run Code Online (Sandbox Code Playgroud)
[编辑]我发现有时1.7.1的语法失败并显示错误消息
C:\Users\username\AppData\Local\Programs\stack\x86_64-windows\ghc-8.4.3\lib/../mingw/bin\ar.exe: .stack-work\dist\7d103d30\build\objs-10648\libHSpackagename-0.1.0.0-DlGXqyeqb9MDn2z8KhgjVb.a: No such file or directory
Run Code Online (Sandbox Code Playgroud)
我使用1.6.0语法解决了这个问题,即使我使用的是Stack 1.7.1.当使用Travis时,这将失败,因为Travis无法在没有SSH密钥的情况下通过SSH进行克隆.但您仍然可以使用https链接
extra-deps:
- github: https://github.com/apolishch/prime_table.git
commit: a510622a824af999a809191e8c959b8ea5fa8bdb
Run Code Online (Sandbox Code Playgroud)