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