我有一个cabal 包,它导出一种NBT
可能对其他开发人员有用的类型。我遇到了Arbitrary
为我的类型定义实例的麻烦,如果不将它提供给其他开发人员来测试他们集成了我的工作的代码,那将是一种耻辱。
但是,我想避免我的实例可能会妨碍的情况。也许其他开发人员对实例应该是什么有不同的想法。Arbitrary
也许我的包对特定版本的 QuickCheck 的依赖可能会干扰或不需要客户端项目的依赖。
我的想法,没有特别的顺序,是:
- 将实例留在
Arbitrary
类型定义旁边,让客户端处理隐藏实例或覆盖 QuickCheck 版本号。 - 使该
Arbitrary
实例成为同一包内的单独模块中的孤立实例,例如Data.NBT.Arbitrary
. 整个包对 QuickCheck 的依赖仍然存在。 - 在完全独立的包中提供
Arbitrary
实例,以便它可以作为客户端项目的单独测试依赖项列出。 - 有条件地在主包中包含
Arbitrary
实例和 QuickCheck 依赖项,但前提-ftest
是设置了类似的标志。
我已经看到在其他库中使用了所有这些的组合,但还没有就哪个效果最好达成任何共识。我想在上传到 Hackage 之前尝试把它做好。