У меня есть функция более высокого-порядка, которую я хочу протестировать, и одно из свойств, которые я хочу проверить, это то, что она делает с переданными функциями.:
gen :: a -> ([a] -> [a]) -> ([a] -> Bool) -> a
Идея примерно в том, что это пример генератора. Я собираюсь начать с одного a
, создать одноэлементный список из [a]
, затем создать новые списки из [a]
до тех пор, пока предикат не скажет мне остановиться. Вызов может выглядеть следующим образом:
gen init next stop
где
init :: a
next :: [a] -> [a]
stop :: [a] -> Bool
Вот свойство, которое я хотел бы протестировать:
При любом вызове
gen init next stop
gen
обещает никогда не передавать пустой список вnext
.
Могу ли я проверить это свойство с помощью QuickCheck , и если да, то как?