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