#haskell #haskell-stack #happstack
#haskell #haskell-stack #happstack
Вопрос:
При попытке установить happstack через
$ stack install happstack
Я получаю следующую ошибку:
Run from outside a project, using implicit global project config
Using resolver: lts-7.2 from implicit global project's config file: /Users/matthewherzl/.stack/global-project/stack.yaml
While constructing the build plan, the following exceptions were encountered:
In the dependencies for happstack-7.0.2:
happstack-server-7.4.6.2 must match >=7.0 amp;amp; <7.4 (latest applicable is 7.3.9)
Plan construction failed.
Похоже, что для happstack требуется более старая, чем самая последняя версия happstack-server. Как мне справиться с этой проблемой?
Возможные исправления, которые я рассмотрел:
- вручную измените конфигурацию happstack в моей системе, разрешив ей зависеть от последней версии happstack-config и предполагая, что это возможно.
- установка более старой версии happstack-config.
- найдите исходное хранилище happstack, убедитесь, что оно работает с последней версией happstack-config, обновите конфигурацию, чтобы она зависела от самой последней версии, и отправьте запрос на извлечение с изменением конфигурации в центральное хранилище happstack.
Я не уверен, как сделать что-либо из этого, в частности, # 3 звучит сложно.
Комментарии:
1. Cabal — это стандартный менеджер пакетов, который обеспечивает более точный контроль над версиями пакетов, но требует больше усилий для других. Не все используют Stack в сообществе. Я знаю, что это не так.
Ответ №1:
Я изначально предполагаю, что вы знаете о разнице между Hackage и Stackage. Если это не так, дайте мне знать, чтобы я мог объяснить это в ответе.
Если вы перейдете на страницу стекирования для LTS 7.2, распознаватель / снимок, используемый вашей глобальной конфигурацией, вы увидите, что пакет happstack отсутствует среди пакетов этого снимка. Затем, если вы проверите документацию по взлому для пакетаhappstack, вы увидите примечание, в котором говорится, что он «устарел в пользу happstack-server». В таком случае все, что вам нужно сделать, это установить happstack-server вместо happstack. (Общий совет для таких ситуаций — всегда проверять документацию в Hackage и / или Stackage, поскольку это может дать более четкое представление о том, что происходит, а также дополнительную информацию о версиях пакета и зависимостях, которые могут вызывать проблемы.)
Несколько слов о трех альтернативах, о которых вы подумали. Если у вас есть старый пакет, который нуждается только в тривиальных изменениях (скажем, в расширении границ зависимостей — если изменения более существенные, вам, возможно, лучше поискать более старый совместимый снимок), который будет создан с использованием последнего снимка стека, подходы № 1 и № 3 не только являются хорошими идеями, но и явно поддерживаются Stack. Как объясняется в документации по стеку (ищите packages
, extra-dep
и extra-deps
опции), вы можете настроить свой проект таким образом, чтобы вместо версий по умолчанию в моментальном снимке стека вы использовали разные версии, например, из Hackage, локального репозитория Git или удаленного репозитория Git. Если вам когда-нибудь понадобится выполнить # 3 для настройки какого-либо пакета, вам даже не нужно ждать, пока upstream примет ваш запрос на извлечение — просто настройте Stack для извлечения зависимости из вашего fork в GitHub или где-либо еще.