У меня есть некоторый код на Haskell, который действительно правильно работает с бесконечным списком, но я не понимаю , почему может успешно это делать. (Я изменил свой исходный код - который не обрабатывал бесконечные списки - чтобы включить что-то из какого-то другого кода онлайн, и вдруг я вижу, что он работает, но не знаю почему).
myAny :: (a -> Bool) -> [a] -> Bool
myAny p list = foldr step False list
where
step item acc = p item || acc
Насколько я понимаю, свёртка заключается в том, что она будет проходить по всем пунктам в списке (и, возможно, это понимание неполное). Если это так, то не должно иметь значения, как сформулирована функция «step» ... код не должен обрабатывать бесконечные циклы.
Тем не менее, следующие работы:
*Main Data.List> myAny even [1..]
True
Пожалуйста, помогите мне понять: почему ??