Haskell Stack从github安装包依赖

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提供了引用更复杂的包位置的示例.

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
Run Code Online (Sandbox Code Playgroud)

然后添加extra-dep: truepackage条目只是为了告诉stack不要将它所引入的代码视为您正在开发的内容(例如,不要在GHCi中加载它).

  • 这个答案似乎过时了.您可以在extra-deps下指定URL和文件路径 (3认同)
  • 它在同一页面上.https://docs.haskellstack.org/en/stable/yaml_configuration/#packages-and-extra-deps本节中有很多例子.来自docs:Extra dependencies,它是在可用包的快照定义之上本地提供的包.这些可以来自Hackage(或您定义的替代包索引,请参阅包索引),HTTP(S)或本地存档,Git或Mercurial存储库或本地文件路径. (2认同)

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)