В разделе зависимостей файла интриги:
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.xЯ предполагаю, что приложения должны всегда помещать верхние пределы так, чтобы они никогда не повреждались, таким образом, этот вопрос только о библиотеках:
Я буду использовать верхний предел версии на зависимости или нет?
Существует явная политика , рекомендующая верхние границы - см., В частности, раздел 3 («Зависимости в Кабале»). Другие ответы дают дополнительное обоснование этой политики.
Вкратце - верхний предел должен быть в форме
ABC ..
). Это связано с тем, что увеличение A.B
должно означать, что версия ломает старые API.
Подумайте о режимах сбоя:
С верхней границей, либо ваш пакет строится, либо клика болтает о неудовлетворенной зависимости сборки. Вина четко определена.
Без верхней границы у клиента есть последняя версия трансформаторов, и она не имеет обратной совместимости. Ваше программное обеспечение не может быть создано; GHC блеет о том, как ваш код не компилируется. Ваше программное обеспечение выглядит некачественно.
Поместите в верхнюю границу.
ИМО, устанавливая верхние границы для принятых номеров версий, является правильным решением. Учитывая семантику номеров версий, используемых Hackage, нет никакой гарантии, что ваш пакет будет работать, в данном случае, с трансформаторами 0.3.0.
Я не видел реального обсуждения этого вопроса, и, похоже, нет общей рекомендации использовать верхние границы, за исключением базового пакета.