Где экземпляры QuickCheck принадлежат клике package?

У меня есть пакет cabal , который экспортирует тип NBT , который может быть полезен другим разработчикам. Я столкнулся с проблемой определения экземпляра Arbitrary для своего типа, и было бы стыдно не предлагать его другим разработчикам для тестирования их кода, который объединяет мою работу.

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

Мои идеи, в произвольном порядке, следующие:

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

Я видел комбинации всего этого, используемые в других библиотеках, но не нашел консенсуса по поводу того, что работает лучше всего. Я хочу попытаться исправить это перед загрузкой на Hackage.

18
задан Community 23 May 2017 в 12:16
поделиться