У меня есть пакет cabal, который экспортирует тип NBT
, которые могут быть полезны для других разработчиков. Я столкнулся с проблемой определения экземпляра Arbitrary
для моего типа, и было бы позором не предлагать его другим разработчикам для тестирования своего кода, который объединяет мою работу.
Однако я хочу избежать ситуаций, когда мой экземпляр может мешать. Возможно, у другого разработчика есть другая идея для того, чем должен быть экземпляр Arbitrary
. Возможно, моя зависимость пакета от конкретной версии QuickCheck может помешать или быть нежелательной в зависимостях клиентского проекта.
Мои идеи, в определенном порядке, следующие:
- Оставьте экземпляр
Arbitrary
рядом с определением типа и позвольте клиентам справляться с затенением экземпляра или переопределением номера версии QuickCheck. - Сделайте экземпляр
Arbitrary
экземпляром-сиротой в отдельном модуле в одном пакете, скажемData.NBT.Arbitrary
. Зависимость от QuickCheck для всего пакета остается. - Предложите экземпляр
Arbitrary
в полностью отдельном пакете, чтобы он мог быть указан как отдельная тестовая зависимость для клиентских проектов. - Условно включают как экземпляр
Arbitrary
, так и зависимость QuickCheck в основном пакете, но только если установлен флаг типа-ftest
.
Я видел комбинации всех из них, которые использовались в других библиотеках, но не нашел консенсуса, по которому лучше всего работает. Я хочу попробовать и получить его прямо перед загрузкой в Hackage.