У меня есть функция более высокого порядка, которую я хочу протестировать, и один из свойств, которые я хочу протестировать, - это то, что он делает с переданными функциями. Для иллюстрации здесь надуманный пример:
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
promises никогда не передавать пустой список вnext
.
Могу ли я проверить это свойство с помощью QuickCheck, и если да, то как?