¿Por qué este código de Haskell funciona correctamente con listas infinitas?

Tengo un código Haskell quehac funciona correctamente en una lista infinita, pero no entiendopor qu puede hacerlo con éxito. (Modifiqué mi código original, que no manejaba listas infinitas, para incorporar algo de otro código en línea, y de repente veo que funciona, pero no sé por qué).

myAny :: (a -> Bool) -> [a] -> Bool
myAny p list = foldr step False list
   where
      step item acc = p item || acc

Mi comprensión de foldr es que recorrerá cada elemento de la lista (y tal vez esa comprensión esté incompleta). Si es así, no debería importar cómo se redacte la función "paso" ... el código debería ser incapaz de manejar bucles infinitos.

Sin embargo, lo siguiente funciona:

*Main Data.List> myAny even [1..]
True

Por favor, ayúdame a entender: ¿por qué ??

Respuestas a la pregunta(8)

Su respuesta a la pregunta