Лучший способ включить разветвленную и неопубликованную версию библиотеки, опубликованной в Hackage, в мой собственный проект

#haskell #haskell-stack

#haskell #haskell-stack

Вопрос:

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

Я разветвил otherlib и внес необходимые изменения, увеличил номер версии (назовем мою версию 0.9.1), создал ее с использованием cabal (что и использует этот проект) и запустил cabal install otherlib , чтобы поместить мою измененную версию в локальный кэш. Теперь я хотел бы включить ее в свой собственный проект как можно разумнее.

Изменения, которые я внес otherlib , (IMO) довольно разумны и имеют шанс быть принятыми сопровождающим, как только я создам PR. Но в то же время у меня есть версия, которой нет в stack наборе решений.

Включение otherlib-0.9.1 в мои package.yaml зависимости не работает и не добавляет его к моим stack.yaml . extra-deps

Есть ли хороший способ настроить это?

Ответ №1:

Вы можете указать репозитории Git (и его версию) в extra-deps из stack.yaml.

Вот пример из документа:

 extra-deps:
- git: git@github.com:yesodweb/wai
  commit: 2f8a8e1b771829f4a8a77c0111352ce45a14c30f
  subdirs:
  - auto-update
  - wai
  

Примечание subdirs требуется только в том случае, если репозиторий содержит несколько пакетов (например, yesodweb).

Ответ №2:

В дополнение к правильному и точному ответу юджи-ямамото я обнаружил, что могу также создать символическую ссылку из otherlib каталога непосредственно в базовый каталог моего собственного проекта и добавить его имя packages во stack.yaml вход . В частности, измененный раздел затем гласит:

 packages:
- .
- otherlib-0.9.1
  

.. при этом также вызывается сам каталог otherlib-0.9.1 .

Это решение будет работать в тех случаях, когда otherlib еще недоступен где-либо за пределами локальной файловой системы.