我有一些 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
请帮助我理解:为什么?