2012-04-26 10 views
2

私のプログラムでData.List.Vectorを使用していますが、今はquickCheckを使用したいと思います。しかし、そのためのインスタンスはありません。Data.List.Vectorを任意のメンバーに簡単にする方法は?

`Arbitrary' is applied to too many type arguments 
In the instance declaration for `Arbitrary V.Vector Double' 

私はまた、単に作ることができると思います。すでに[ダブル]のための任意があるので、私は私が

instance Arbitrary V.Vector Double where 
    arbitrary = V.fromList (arbitrary :: [Double]) 

悲しいような何かを行うことができ、GHCは全くこれを好きではないと思いました[Double]を取り込み、V.fromListを使うプロパティの束ですが、それは退屈なようです。

答えて

8

あなたの問題はinstance Arbitrary (V.Vector Double)、などのように、あなたはそれを括弧する必要があるということです。しかし、それを行うには良い方法があります:arbitraryはタイプGen aの値であるので、あなたがfmapが必要

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

注意、 Gen [a]からGen (V.Vector a)に移動するには、V.fromListGenに持ち上げる必要があります。これはファンクタであるため実行できます。

関連する問題