無限リストで正しく動作する 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
私が理解するのを手伝ってください:なぜ??