データ型の のインスタンスを書くのArbitrary
は簡単です。arbitrary
を返す関数を実装するだけGen Cell
です。これを行う最も簡単な方法は、既存のArbitrary
インスタンスを利用Gen
し、それがモナドであることに注意することです。したがって、 do
-notationを使用できます。
instance Arbitrary Cell where
arbitrary = do
Positive x <- arbitrary
Positive y <- arbitrary
return $ Cell x y
あるいは、ジェネレーターは、多くの場合、次の演算子を使用してエレガントに記述できますControl.Applicative
。
instance Arbitrary Cell where
arbitrary = Cell <$> pos <*> pos
where pos = getPositive <$> arbitrary -- getPositive requires QC >= 2.5
ここでは、Test.QuickCheck.ModifiersPositive
の修飾子も使用して、正の整数のみを生成するようにしています。
より複雑なジェネレーターを作成するには、Test.QuickCheck.Genのさまざまなジェネレーターを参照してください。