The core points in your criticism is known though, and basically apply to any other language. Most language with new concepts and new syntax will be difficult to learn if you already are used to another language. Especially if the language is almost the opposite of the one you learn. Imperative language are about writing how and writing functionally is about writing what. Widely different mindset is needed to accomplish many tasks. Recursion being one thing, monadic computation being another. One thing many people coming from OOP to Haskell have a hard time with is that they write new classes when what they really want is new datatypes.
In the end you win when you've learnt a language such as Haskell though, cause even if you won't write production code in it you will learn a lot of useful practices you can apply to everyday programming. Also you will have a new language to write your side projects in. ;)