データ型の のインスタンスを書くの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のさまざまなジェネレーターを参照してください。