Принимая заметку от nponeccop, я бы предложил этот шаблон:
import Test.QuickCheck
prop_commutative f g x = ...
main = quickCheck $ prop_commutative f g
where f x = ...
g x = ...
Этот подход требует, чтобы вы выдвинули контрпример. Все просто: представьте себе две функции, которые, будучи составленными в обоих направлениях, не дают одинакового результата. Этот подход также использует частичное применение. Я передал две функции prop_commutative
, оставив только 1005 * для быстрой генерации и проверки.
Хотя это может быть слишком просто. Если вы можете сделать это, то следующий шаг - удалить конкретные контрпримеры и выяснить, как заставить quickCheck генерировать функции для вас.