Problem specifically in Haskell is that you have to worry about implementing tail recursion to get efficient stack usage. That's not necessary for loops, which Haskell doesn't support. Though other functional languages do support them.
ghci> :{
ghci| for_ [1 .. 10] $ \i ->
ghci| print i
ghci| :}
1
2
3
4
5
6
7
8
9
10
It doesn't require loops to be implemented at the language level, however. The language is rich enough to support user-defined loop constructs.I also may have gotten some detail slightly wrong, the code in Data.Foldable is kinda weird and I haven’t Haskell’d in a while