Я пытаюсь запустить QuickCheck в некоторых вложенных списках, что-то похожее на это:
type Constraint = Text
data Value = Value [Constraint]
data Literal = Literal Value [Value]
type Formula = [Literal]
Таким образом, формула представляет собой список литералов, каждый из которых содержит предикат и некоторые аргументы; предикат/аргументы - это значения, которые являются дизъюнкцией ограничений в форме строки каждый. Это дает нам список списков списков, phew!
Если один из моих свойств QuickCheck не работает, я, как правило, получаю непонятную страницу вывода. Прежде чем экспериментировать с термоусадочной пленкой, я использовал это, чтобы иметь произвольные экземпляры, которые могли генерировать только небольшой набор (малых) значений. Реализация функции усадки для каждого из моих типов, похоже, немного помогает, но не так сильно, как хотелось бы. Я все еще получаю распечатку вывода.
Я думаю, что я хочу от сокращения - это небольшой список литералов, где каждый литерал имеет небольшой список значений, который, в свою очередь, имеет несколько ограничений, каждый из которых как можно короче. Но в моих текущих усилиях, по крайней мере, из этих списков становится достаточно большим, чтобы сделать выход ужасным. Если я попытаюсь настроить мои сокращения, я также обнаружил, что QC начинает очень долго (поиск сокращений?), Что смягчает мои усилия по эффективному сокращению.
Как вы улучшаете свои шансы на понимание сбоев QuickCheck, когда у вас есть вложенные данные?