1
将非常见类型类的实例声明放在额外模块中是不错的样式吗?额外模块中罕见类型类的实例声明
作为一个例子,我有这个简单的树类型:
module Data.Tree where
data Tree a = Leaf a
| Node (Tree a) (Tree a)
假设我想用快速检查的Arbitrary
类型类生成Tree
类型的随机值(和能够不仅在测试中使用它们)。
什么是最好的?把它们放在同一个模块在Tree
定义
module Data.Tree where
import QuickCheck.Arbitrary
data Tree a = ...
instance Arbitrary a => Arbitrary (Tree a) where
...
或外包实例声明另一个模块,以避免Data.Tree
module Data.Tree.Arbitrary where
import Data.Tree
import QuickCheck.Arbitrary
instance Arbitrary a => Arbitrary (Tree a) where
...
或别的东西完全依赖于QuickCheck.Arbitrary
?
避免软件包的依赖关系不只是一个性能问题,它是关于避免与可能有不同的版本库的依赖其它软件包之间的冲突。 –
@AlexeyRomanov:当然,但是在依赖冲突的情况下,孤立实例模块可能也无济于事。 – leftaroundabout
@leftaroundabout如果该模块没有暴露 - 例如如果它只在测试套件的内部使用,这看起来可能考虑到在问题中对快速检查的明确讨论。 –