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

はtypeの値であるfmapため、が必要であることに注意してください。したがって、に移動するには、にリフトする必要があります。これは、ファンクターであるため実行できます。arbitraryGen aGen [a]Gen (V.Vector a)V.fromListGen

于 2012-04-26T21:33:34.860 に答える