2015-02-03 4 views
2

Я пытаюсь запустить новый проект с помощью веб-фреймворка Snap. Я использовал snap init, чтобы получить базовый скелет. Я также положил http://www.stackage.org/lts/cabal.config рядом с моим .cabal файлом. Я не раскомментировал эту строку исключительно для использования Stackage. Поэтому я попытался построить, и он потерпел неудачу и не смог найти версию lens, необходимую для моего файла .cabal. Файл cabal.config из Stackage указывает версию объектива, которая не совпадает с версией в моем файле .cabal. Поэтому я удалил все ограничения из своего списка пакетов и сделал обычный cabal install --only-dep -j8 --enable-test, и он сработал!Stackage включительно или эксклюзивное использование

Однако мне всегда говорили, что версии пакетов должны быть ограничены. Так что, работая со Stackage, можно ли оставить версии пакетов без ограничений? Должен ли я понижать мои пакеты до тех, которые доступны в Stackage?

Насколько я понимаю, файл cabal.config задает набор зависимостей с конкретными версиями, которые удовлетворяют зависимостям, и как работает Stackage? Это всего лишь подмножество пакетов от Hackage, которые, как доказано, совместимы? Принимают ли они свои собственные пакеты или полагаются на Hackage для загрузки?

Заранее благодарен

ответ

1

Оба варианта доступны. Опция по умолчанию - это то, что вы сделали, и по-прежнему переходит к хакерству, чтобы получить пакеты. Вы просто добавили фильтр в свой кабал, который запрещает вам использовать любую версию пакета, включенного в Stackage, который не был протестирован для совместной работы со всеми другими пакетами.

Другой вариант состоит в том, чтобы просто указать ваше ретрансляционное кэширование на URL-адрес Stackage, а затем вы будете загружать пакеты непосредственно с сервера Stackage. Этот сервер будет обслуживать только пакеты, которые, как известно, работают вместе, поэтому нет необходимости в дополнительных ограничениях в вашем файле кэша. Я действительно предпочитаю этот способ работы.

В обоих случаях, если у вас есть дополнительные ограничения в файле cabal, которые несовместимы с ограничениями Stackage, ваша сборка завершится с ошибкой. Если вы используете первый вариант, вы получите конфликты зависимостей. При использовании второго варианта сервер Stackage просто сообщит, что у него нет этого конкретного пакета/версии.

+0

Последующие действия, поэтому следует добавить ограничения, совместимые с Stackage, в мой файл .cabal? –

+0

Если вы собираетесь создавать только Stackage, я не вижу смысла добавлять ограничения к вашим файлам .cabal: выбранный снимок Stackage предоставляет полное описание набора пакетов и его ограничений. Если вы хотите, чтобы другие люди могли создавать ваш пакет против Hackage, было бы целесообразно сохранить ограничения на основе API, которые вы используете для пакетов. – kdkeyser

+0

Спасибо. Принят сейчас. –

Смежные вопросы