Почему в стеке не используется определенная дополнительная зависимость? - PullRequest
0 голосов
/ 02 января 2019

Я внес изменение в проект Haskell opaleye , который мне нужен для проекта, над которым я работаю. Изменение относится к версии 0.6.7003.1, которая еще не распространилась в хранилище nixos ( nixos.org показывает, что его текущей версией является 0.6.7001.0).

Поскольку эта необходимая зависимость отличается от версии LTS резолвера, я отметил дополнительную зависимость в stack.yaml:

packages:
- git@github.com:tomjaguarpaw/haskell-opaleye.git
- commit: cf3296c5ffef58d36dd6b386ae53dff519ee47e9

Я также отметил эту версию в build-depends моего project.cabal файла:

build-depends: opaleye >= 0.6.7003.1 && < 1

Когда я попытался построить, я получил следующую ошибку:

$ stack build

Error: While constructing the build plan, the following exceptions were encountered:

In the dependencies for taskmaster-0.1.0.0:
    opaleye must match >=0.6.7003.1 && <1, but the stack configuration has no specified version  (latest matching version is 0.6.7003.1)
needed since taskmaster is a build target.

Some different approaches to resolving this:

  * Consider trying 'stack solver', which uses the cabal-install solver to attempt to find some working build configuration. This can be convenient when dealing with many
    complicated constraint errors, but results may be unpredictable.

  * Recommended action: try adding the following to your extra-deps in /home/matthew/backup/taskmaster/taskmaster/stack.yaml:

opaleye-0.6.7003.1@sha256:914ac99c6f7ceea050df843ac31c33be0f6340bc0f05753c8fdfc18074fa9e5b

Plan construction failed.

(я не понимаю, откуда взялся этот длинный (> 40 символов) хэш sha256). Я последовал совету и добавил следующее к своему stack.yaml.

extra-deps:
- opaleye-0.6.7003.1@sha256:914ac99c6f7ceea050df843ac31c33be0f6340bc0f05753c8fdfc18074fa9e5b

Когда я запускаю $ stack build, чтобы построить свой проект, компилятор пытается собрать, не показывая никаких ошибок зависимости. Тем не менее, он вызывает ошибку типа, которой не было бы, если бы он использовал версию Opaleye, содержащую мои изменения. И, когда я запускаю $ stack ghci и импортирую соответствующий модуль opaleye, мои изменения отсутствуют. Похоже, что стек все еще использует более старую версию opaleye. Как я могу заставить стек использовать более свежую версию opaleye, содержащую мои изменения? Кажется, мои попытки исчерпали возможности, упомянутые в документации по haskell-stack .

Ответы [ 2 ]

0 голосов
/ 08 января 2019

Опция hackage обычно лучше, чем github extra-dep.

Правильный синтаксис для того, что вы изначально попробовали, был бы

extra-deps:
- git: https://github.com/tomjaguarpaw/haskell-opaleye.git
  commit: cf3296c5ffef58d36dd6b386ae53dff519ee47e9

, а версия github: tomjaguarpaw/haskell-opaleye - это простоЯрлык.

Хеш sha256 - это сумма sha256 файла cabal, соответствующая этой версии (и редакции) opaleye.

Учитывая, что версия opaleye уже уже находится на взломе , вы должны просто иметь возможность добавить строку, предложенную стеком.Вы можете попробовать stack clean после внесения изменений (хотя в этом нет необходимости).

Если вы предоставите дополнительную информацию, я обновлю этот ответ.

0 голосов
/ 04 января 2019

Оказалось, что предложение стека extra-deps было неверным. Я заметил альтернативный формат под этой проблемой стека github , попробовал, и у меня получилось. Рабочий формат extra-deps указан ниже.

extra-deps:
- github: tomjaguarpaw/haskell-opaleye
  commit: cf3296c5ffef58d36dd6b386ae53dff519ee47e9
...