Зависимость пакета установки стека Haskell от github

можно ли установить версию пакета из github с помощью стека Haskell?

например .cabal или stack.yaml файл, как я могу указать зависимость в Git repo/branch / revision?

3 ответов


на документация 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

затем добавить extra-dep: true до package запись просто сказать stack не рассматривать код, который он вытаскивает, как то, что вы разрабатываете (например, не загружайте его в GHCi).


новый синтаксис для стека >1.7.1

как прокомментировал @Flip, документы в docs.haskellstack.org уточните новый синтаксис для вашего stack.yaml - это:

extra-deps:
- github: apolishch/prime_table
  commit: a510622a824af999a809191e8c959b8ea5fa8bdb
- github: apolishch/reactive-banana
  commit: "74bac0f"
  subdirs: reactive-banana

чтобы быть ясным: зависимости в вашем stack.yaml убедитесь, что пакеты (которые не в Stackage) доступны бы какой-нибудь .cabal файл в вашем проекте хочет их, на всякий случай.

вы все равно должны указать имя пакета в build-depends в своем .cabal файл, чтобы сказать, что вы на самом деле зависит от пакета.

внимание, неважно какая ветвь фиксации, и РЕПО может быть вилки. Когда пакет находится в подкаталоге, вы можете указать его, иначе он будет по умолчанию верхнего уровня.

синтаксис для стека >1.6.0

extra-deps:
- github: git@github.com:apolishch/prime_table.git
  commit: a510622a824af999a809191e8c959b8ea5fa8bdb

[Edit] я обнаружил, что иногда синтаксис из 1.7.1 терпит неудачу с сообщением об ошибке

C:\Users\username\AppData\Local\Programs\stack\x86_64-windows\ghc-8.4.3\lib/../mingw/bin\ar.exe: .stack-work\distd103d30\build\objs-10648\libHSpackagename-0.1.0.0-DlGXqyeqb9MDn2z8KhgjVb.a: No such file or directory

и я решил это, используя синтаксис 1.6.0, хотя я использовал стек 1.7.1. При использовании Travis это не удастся, потому что Трэвис не может клонировать через SSH без ваших SSH-ключей, конечно. Но вы все равно можете использовать https-ссылку как

extra-deps:
- github: https://github.com/apolishch/prime_table.git
  commit: a510622a824af999a809191e8c959b8ea5fa8bdb

в моем случае я хотел зависеть от вилки pandoc, указав точную фиксацию. Это сработало, добавив следующее в stack.yml:

extra-deps: - archive: https://github.com/italia/pandoc/archive/1327c564cccf5dfa387a2956443990d9854c85cd.zip

это будет работать с любым ветке-как URL на Git. Я нашел свой url, просмотрев файлы в фиксации и скопировав URL-адрес с кнопки "Загрузить ZIP".

обратите внимание, что моя ветвь имеет определенную версию, выше, чем любой стек версий может получить от распознавателя. Я указываю версию в каббалистические зависимости. Если версия на этой ветви будет перекрываться с одной доступной в индексе распознавателя, я не уверен, какой из них будет выбран