Политика управления версиями пакета Haskell - изменения в зависимостях

Скажем, у меня есть libfoo. Это зависит от libbar. В соответствии с Политика версий пакетов, я указываю

libbar ==0.1.*

в Build-depends: в моем файле кэша.

Затем разработчик libbar выпускает новую версию, 0.2. Я тестирую его, и никаких изменений, влияющих на libfoo, нет. Поэтому я изменяю свой сборку - зависит от

libbar ==0.2.*

или, возможно,

libbar >= 0.1 && < 0.3

хотя я могу думать о причинах не делать это последним способом. Это единственное изменение, которое я делаю для libfoo.

libfoo экспортирует функции, которые принимают типы, определенные в libbar и возвращаемые типы, определенные в libbar. Однако изменение в libbar не влияет ни на одну из этих функций.

Первая версия libfoo - 0.1.0.0. Какой номер версии должен иметь второй выпуск libfoo?

Ответ 1

Это зависит от того, что вы реэкспортируете из libbar.

Вы повторно экспортируете libbar?

Вряд ли, но....

Учитывая, что libbar изменил свое основное число с 0,1 до 0,2, есть что-то, что может сломать код в изменении, и если вы повторно экспортируете его оптом, ваш основной номер тоже изменится: 0.2.0.0

Does libbar 0.2 объявляет новые экземпляры?

Это смотреть.

Невозможно остановить экземпляры, протекающие через границы модулей, а новые экземпляры могут нарушить существующий код. Вот почему политика версий говорит

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

Если в libbar 2.0 есть новые экземпляры, у вас должна быть новая основная версия: 0.2.0.0.

В противном случае

В этом случае ваш код не изменяется. Пункт 2 политики управления версиями пакетов не применяется:

  • В противном случае, если к интерфейсу были добавлены только новые привязки, типы, классы или модули (но см. ниже), то A.B может оставаться тем же, но новый C должен быть больше, чем старый C.

Основной принцип:

A.B.C уникально идентифицирует API.

Вы ничего не добавили или ничего не изменили, чтобы экспортировать, поэтому вам не нужно менять основной младший номер с 0.1.0, но должен изменить последнюю часть: 0.1.0.1 прав.