3

我在我的程序中使用 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 的属性,但这似乎很乏味。

4

1 回答 1

10

您的问题是您需要将其括起来,例如instance Arbitrary (V.Vector Double)等。但是有一种更好的方法:

instance (Arbitrary a) => Arbitrary (V.Vector a) where
    arbitrary = fmap V.fromList arbitrary

请注意,您需要fmap因为arbitrary是 type 的值Gen a,因此为了从Gen [a]toGen (V.Vector a)您需要提升V.fromListinto Gen,您可以这样做,因为它是一个仿函数。

于 2012-04-26T21:33:34.860 回答