If Java is so great at solving these "simple" problems, then why do hugely complex frameworks like Spring exist?
The language features of Haskell that you mention can describe your "simple operations" symbolically, you then just need to write a few different interpreters, one for real services, one for testing etc. No dependency injection, aspect-oriented programming or AbstractSingletonProxyFactoryBeans needed.
You might feel that the complexity has just moved, but I'd much rather invest my time in solutions that are not ad-hoc.