我在我的程序中使用 Data.List.Vector,现在我想使用 quickCheck。但是,没有实例。由于已经有 [Double] 的任意性,我想我可以做类似的事情
instance Arbitrary V.Vector Double where
arbitrary = V.fromList (arbitrary :: [Double])
唉,GHC 根本不喜欢这样:
`Arbitrary' is applied to too many type arguments
In the instance declaration for `Arbitrary V.Vector Double'
我想我也可以制作一堆接受 [Double] 并使用 V.fromList 的属性,但这似乎很乏味。
最佳答案
你的问题是你需要把它括起来,比如 instance Arbitrary (V.Vector Double)
等。但是有一个更好的方法来做到这一点:
instance (Arbitrary a) => Arbitrary (V.Vector a) where
arbitrary = fmap V.fromList arbitrary
请注意,您需要
fmap
,因为 arbitrary
是 Gen a
类型的值,因此为了从 Gen [a]
到 Gen (V.Vector a)
,您需要将 V.fromList
提升到 Gen
,因为它是一个仿函数,所以您可以这样做。关于haskell - 如何让 Data.List.Vector 轻松成为 Arbitrary 的成员?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10341674/