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