Perfect (simplest) FP can be a thonier goal to pursue , because , a lot of coding you spend extra time on and is more verbose, but accomplishes thr goal of the functionality just as perfectly. Then, you can go to a repo and find your exact same program in 90% less code.
The reddit has a lot of subdebates on the “truth” properties of different ways of “doing/writing” the same programs.
Personally , I found that a grasp of combinatorics and lamba background helps me find my way around understanding which modules will do what.
Your actual # of tasks in writing in Haskell, casually, is very limited… you find and express your value functions , then arguably use modules to accomplish the so to speak I/o/db manipulation… Disclaimer, I am a Haskell newcomer, so take my advice with a grain of salt … but as someone from a computing theory and math perspective, I would say Haskell makes complete intuitive sense , but still that the programming with it is hard work, because the onus is on the coder to find a perfect function to use, Whereas in imperative programming , the burden is much more so on the computing architecture, and the coder merely specifies actions to take. The downside of it is that you have a hard time relying on perfectly logical and truthful behavior from your program… Those risks are side effects .
In fp, you should fully expect all outputs. … in imperative, your program has a high inherent and implicit risk of breaking if it receives unexpected or exploitative inputs or input chains .
Hth just my 2 cents as a fellow person in awe of fp’s power