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