Как справиться с тем, что настроенный диапазон зависимостей пакета Haskell устарел?

#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. Как мне справиться с этой проблемой?


Возможные исправления, которые я рассмотрел:

  1. вручную измените конфигурацию happstack в моей системе, разрешив ей зависеть от последней версии happstack-config и предполагая, что это возможно.
  2. установка более старой версии happstack-config.
  3. найдите исходное хранилище 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 или где-либо еще.