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