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