我在我的程序中使用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的属性,但这看起来很乏味。
答案 0 :(得分:10)
您的问题是您需要将其括起来,例如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
,你可以这样做,因为它是一个仿函数。