我在我的程序中使用 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 ,因为 arbitraryGen a 类型的值,因此为了从 Gen [a]Gen (V.Vector a) ,您需要将 V.fromList 提升到 Gen ,因为它是一个仿函数,所以您可以这样做。

关于haskell - 如何让 Data.List.Vector 轻松成为 Arbitrary 的成员?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10341674/

10-13 03:45