Yes, learn Haskell even if you don't use it for money. An in-depth experience with Haskell gives you a mind-set understanding the benefits and implications of functional purity, static typing, and arguably-less-important-but-unique lazy evaluation. (I'm unhappy with every statically typed language including Haskell. Yes, I believe static typing is superior to dynamic, yet we still haven't achieved an amazing static language.) Carrying this mindset into whatever other language you use will boost your ability to break down problems and form proper solutions. Of course it's not a sliver bullet, but it's the closest thing we got to it. At the very least, it's training wheels for your programming skills.
Off the top of my head, a few cons for everyday use:
- Monad transformer functions are essentially method-functions in every OO language. However, methods are easier to write and maintain by comparison.
- Naming collisions. The record syntax often needs to be prefixed if the data type is (over-)exposed. It's quite annoying.
- And, fact that the 'lens' library exists and is immensely popular implies that some things in the language are broken.
- Historical baggage. For example, map should be a function under Functor. fmap, lift(s), <$>, etc. should be removed.
Having said that, I find myself programming in dynamic languages most often because they're cleaner and easier syntactically and unnecessarily-flexible implying future-proof for non-invented concepts. Thinking in Haskell, let's me approach this cautiously.