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