2012-03-25 12 views
9

QuickCheckを使用して純粋なコードをテストする場合は、しばしばArbitraryインスタンスを記述する必要があります。モナドコードをテストするには、このarticleに記載されているようにTest.QuickCheck.Monadicを使用できます。QuickCheckで使用する任意のMonadicバージョンはありますか?

私の質問はです:モナドのコンテキストに依存するデータを生成する標準的な方法はありますか?特に、任意のモナドバージョンがありますか?モナドのコンテキストを必要とするデータの生成についてはどうしたらよいですか?

答えて

3

ランダムにコンテキストを生成する

適切なランダムなモナドコンテキストを生成するだけです。あなたがテストを実行している場合、あなたは純粋な想像上のモナドの土地にとどまることはできません、実際にテストするために特定のモナドを選ぶ必要があります。あなたはリストのモナドを選んだのですか?コンテキストとしてリストをランダムに生成します。州のモナド?コンテキストの状態タイプの値をランダムに生成します。作家?ログをランダムに生成します。

ランダムですから、正確に、生成する何をしたいですかアクション

を生成?モナドアクションの場合は、固有のプリミティブに基づいて、特定のモナドに対してモナディアクションを生成する方法を提供する必要があります。例えばランダムに生成されたステートアクションは、ステートプリミティブgetputからランダムに構築する必要があります。

あなたがモナドアクションを作り出す機能fを生成し、コンテキストcを生成するためにQuickCheckを使用するQuickCheckの機能を使用する場合は、それらを一緒に入れて、単純に、一緒にc >>= f

それらを、あなたがすることができます置きます。あるいは、単にアクションaを直接生成し、c >> aを実行することができます。

6

GenArbitraryタイプのクラスは、基本的にGen aジェネレータのプロバイダであるため、Arbitraryのインスタンスをモナドフレームワークで使用するために使用します。

関連する問題