2
我是Haskell的新手,我正在尝试编写一个测试用例来证明Semigroup typeclass的关联定律。如何实现像这样的数据类型的任意实例?
数据类型定义如下:
newtype Combine a b = Combine {unCombine :: (a -> b)}
如随后半群的实施:
instance (Semigroup b) => Semigroup (Combine a b) where
(Combine f) <> (Combine g) = Combine (\x -> f x <> g x)
我已经写了一个缔测试功能
assocTestFunc :: (Eq m, Semigroup m) => m -> m -> m -> Bool
assocTestFunc a b c = (a <> b) <> c == a <> (b <> c)
和还定义了一个类型别名是这样的:
type CombineAssoc = Combine String Ordering -> Combine String Ordering -> Combine String Ordering -> Bool
所以在我的主要功能,我可以这样测试:
quickCheck (assocTestFunc :: CombineAssoc)
但是我有一个很难实现的Combine a b
数据类型Arbitrary
实例。 感谢提前寻求帮助。
补充说明'Combine'需要一个'Show'实例,或者必须和'Blind'一起使用。否则'quickCheck(assocTestFunc :: ...)'不会进行类型检查。 – Zeta
不仅如此,还需要'Eq'实例。 –
是的,你们都是对的,是否有可能给这个数据类型的Show实例和Eq实例的完整实现?谢谢! – PoppinDouble