私の理解はそれでfoldlあり、foldr次のように実行されます:
foldl f a [1..30]=>(f (f (f ... (f a 1) 2) 3) ... 30)
と
foldr f a [1..30]=>(f 1 (f 2 (f 3 (f ....(f 30 a)))))..)
そう..foldr (&&) False (repeat False)一番外側が最初の引数をfalseとf見なし(&&) False ((&&) False (....))、2番目の引数を評価する必要がないため、ショートサーキットできます(これは大きなサンクです)。
それで何が起こるか
andFn :: Bool -> Bool -> Bool
andFn _ False = False
andFn x True = x
と
foldl andFn True (repeat False) -- =>
-- (andFn (andFn ...(andFn True False) ... False) False)
-- ^^ outermost andFn
しかし、これには永遠に時間がかかります。
2 番目の引数のパターン マッチングによって、答えoutermost andFnがFalse..
ここで他に何が起こっていますか?