Случайно генерировать контекст
Просто создайте подходящий случайный монадный контекст. Если вы проводите тесты, вы не можете оставаться на чистой воображаемой земле монад, вам действительно нужно выбрать конкретную монаду для тестирования. Вы выбрали монаду списка? Случайно генерировать список в качестве контекста. Государственная монада? Произвольно генерировать значение типа состояния для контекста. Писатель? Случайно создать журнал.
Произвольно сгенерировать действие
Так что именно вы хотите сгенерировать? Если это монадическое действие, то вам нужно предоставить способ генерации монадических действий для вашей конкретной монады на основе ее уникальных примитивов . например случайно генерируемые действия состояний должны быть случайным образом созданы из состояний примитивов get
и put
.
Соедините их
Если вы используете возможности QuickCheck для генерации функции f
, которая производит монадическое действие, и используете QuickCheck для генерации контекста c
, то вы можете просто c >>= f
собрать их вместе. Или вы можете просто сгенерировать действие a
напрямую и выполнить c >> a
.