Haskell의 foldl과 foldr, 이름은 비슷하지만 전혀 다르게 동작하는 이유
Differences Between `Foldl` and `Foldr`

Haskell 블로그의 Alexis King 글로, foldl과 foldr의 근본적인 차이를 설명한다. 둘 다 리스트를 왼쪽에서 오른쪽으로 순회하지만 결합 방향이 다르다. 지연 언어에서 foldl은 거대한 thunk를 쌓아 공간을 낭비하므로 foldl'을 써야 하고, foldr은 두 번째 인자에 대해 lazy한 함수와 함께 쓸 때 무한 리스트를 다룰 수 있다. 누산 함수가 strict하면 foldl', lazy하면 foldr을 사용하라는 규칙을 제시한다.
foldr은 이런 방식으로 무한 리스트에 작동할 수 있지만, foldl은 그럴 수 없다.