次のようなネストされたリストで QuickCheck を実行しようとしています。
type Constraint = Text
data Value = Value [Constraint]
data Literal = Literal Value [Value]
type Formula = [Literal]
したがって、式はリテラルのリストであり、それぞれのリテラルには述語といくつかの引数が含まれています。predicate/arguments は、それぞれ文字列形式の制約の論理和である値です。これにより、リストのリストのリストのリストが得られます。
QuickCheck プロパティの 1 つが失敗した場合、理解できないページいっぱいの出力が得られる傾向があります。縮小を試す前に、小さな (小さな) 値のセットしか生成できない任意のインスタンスを用意することで、これを回避していました。私のタイプごとに縮小機能を実装すると、少しは役立つようですが、私が望むほどではありません。まだページ一杯の出力が得られます。
私がシュリンクに求めているのは、リテラルの小さなリストであり、各リテラルには小さな値のリストがあり、制約がほとんどなく、それぞれが可能な限り短いものであると思います。しかし、私の現在の取り組みでは、少なくともこれらのリストのいずれかが大きくなりすぎて、出力がひどいものになってしまいました。シュリンクの実装を調整しようとすると、QC に非常に長い時間がかかるようになり (シュリンクの検索?)、効果的にシュリンクするための努力が妨げられます。
このようにネストされたデータがある場合、QuickCheck の失敗を理解する機会をどのように改善しますか?