【发布时间】:2016-03-19 06:32:46
【问题描述】:
将不常见的类型类的实例声明放在额外的模块中是一种好的方式吗?
作为一个例子,我有这个简单的树类型:
module Data.Tree where
data Tree a = Leaf a
| Node (Tree a) (Tree a)
假设我想使用 QuickCheck 的 Arbitrary 类型类生成 Tree 类型的随机值(并且不仅可以在测试中使用它们)。
什么是最好的?将它们放在定义 Tree 的同一模块中
module Data.Tree where
import QuickCheck.Arbitrary
data Tree a = ...
instance Arbitrary a => Arbitrary (Tree a) where
...
或将实例声明外包给另一个模块以避免在Data.Tree 中对QuickCheck.Arbitrary 的依赖
module Data.Tree.Arbitrary where
import Data.Tree
import QuickCheck.Arbitrary
instance Arbitrary a => Arbitrary (Tree a) where
...
还是完全不同的东西?
【问题讨论】: