Зависимости пакета Hackage и библиотеки будущего - PullRequest
6 голосов
/ 13 мая 2010

В разделе зависимостей файла cabal:

Build-Depends: base >= 3 && < 5, transformers >= 0.2.0

Должен ли я делать что-то вроде

Build-Depends: base >= 3 && < 5, transformers >= 0.2.0 && < 0.3.0

(установление верхних ограничений на версии пакетов, от которых я зависит)

или нет?

Я приведу реальный пример: мой пакет "Список" в Hackage (список преобразователя и класса монад)

  • Если я не установлю ограничение - мой пакет может сломаться из-за изменения "трансформаторов"
  • Если я поставлю ограничение - пользователь, который использует «трансформеры», но использует более новую версию, не сможет использовать lift и liftIO с ListT, потому что это только экземпляр этих классов трансформаторов-0,2.х

Я полагаю, что приложения всегда должны устанавливать верхние пределы, чтобы они никогда не нарушались, поэтому этот вопрос касается только библиотек:

Должен ли я использовать верхний предел версии для зависимостей или нет?

Ответы [ 3 ]

4 голосов
/ 14 мая 2010

Существует явная политика , рекомендующая верхние границы - см., В частности, раздел 3 («Зависимости в Кабале»). Другие ответы дают дополнительное обоснование этой политики.

Короче говоря - верхний предел должен быть в форме < A.(B+1), где A и B - первые элементы текущей версии (A.B.C...). Это потому, что увеличение A.B должно означать, что версия ломает старые API.

2 голосов
/ 13 мая 2010

Подумайте о режимах отказа:

  • С верхней границей либо ваш пакет собирается, либо клика блеет о неудовлетворенной зависимости сборки. Вина четко назначена.

  • Без верхней границы, у клиента есть последняя версия трансформаторов, и она не имеет обратной совместимости. Ваше программное обеспечение не удается собрать; GHC блеет о том, что ваш код не компилируется. Ваше программное обеспечение выглядит дрянным.

Поставить верхнюю границу.

1 голос
/ 13 мая 2010

IMO, ставящий верхние границы для принятых номеров версий, является правильным решением. Учитывая семантику номеров версий, используемых Hackage, безусловно, нет гарантии, что ваш пакет будет работать, в данном случае с трансформаторами 0.3.0.

Хотя я не видел никаких реальных обсуждений по этому поводу, и, похоже, нет общей рекомендации использовать верхние границы, кроме базового пакета.

...