Haskellにforループがない?のは

「副作用がないから」という、はじめの答えで良いのではないでしょうか。forループの計算結果を反映する方法がないわけで。モナドの中なら良いのかもしれませんが、モナドは「入ると出られない」ので、iterationだけのためにモナドを使うぐらいなら、foldのほうが良いですし。

http://www.haskell.org/~pairwise/intro/section4.html#part1