を使用して純粋なコードをテストしたい場合、インスタンスQuickCheck
を作成する必要があります。Arbitrary
モナディックコードをテストするTest.QuickCheck.Monadic
には、この記事で説明されているように使用できます。
私の質問は:モナディックコンテキストに依存するデータを生成するための標準的な方法はありますか?特に、Arbitraryのモナディックバージョンはありますか?モナディックコンテキストを必要とするデータをどのように生成しますか?
を使用して純粋なコードをテストしたい場合、インスタンスQuickCheck
を作成する必要があります。Arbitrary
モナディックコードをテストするTest.QuickCheck.Monadic
には、この記事で説明されているように使用できます。
私の質問は:モナディックコンテキストに依存するデータを生成するための標準的な方法はありますか?特に、Arbitraryのモナディックバージョンはありますか?モナディックコンテキストを必要とするデータをどのように生成しますか?
Gen
型クラスは基本的に単なるジェネレーターのプロバイダーであるArbitrary
ため、基本的にモナドフレームワークでインスタンスを操作するために使用するものです。Arbitrary
Gen a
適切なランダムモナディックコンテキストを生成するだけです。テストを実行している場合、純粋な架空のモナドの土地にとどまることができません。実際にテストするには、特定のモナドを選択する必要があります。リストモナドを選びましたか?コンテキストとしてリストをランダムに生成します。州のモナド?コンテキストの状態タイプの値をランダムに生成します。作家?ランダムにログを生成します。
では、正確に何を生成したいですか?それがモナドアクションである場合は、その固有のプリミティブに基づいて、特定のモナドに対してモナドアクションを生成する方法を提供する必要があります。たとえば、ランダムに生成されたStateアクションは、Stateプリミティブget
とからランダムに構築する必要がありput
ます。
f
QuickCheckの機能を使用してモナディックアクションを生成する関数を生成し、QuickCheckを使用してコンテキストを生成する場合は、それらc
を簡単c >>= f
に組み合わせることができます。または、アクションa
を直接生成して実行することもできますc >> a
。