Using map, fold etc. is not the hard part of functional programming. The hard part is managing effects (via monads, monad transformers, or effects). Trying to convert a procedural inner mutating algorithm to say Haskell is challenging.
The main problem with Monads is you're almost always the only programmer on a team who even knows what a Monad is.
You can say that again!
Right now I'm working in C#, so I wished my C# managed effects, but it doesn't. It's all left to the programmer.