I've spent the better part of my holiday studying Haskell. It has been an enlightening experience. I think I understand monads now. At least I get why they are useful (and necessary in Haskell).
The type system in Haskell is incredible. I wish all languages had one as powerful as that.
The functional paradigm is awesome. I've learned so many things over the past years, I feel I've become a better programmer. My C# code I write at work is more and more functional in nature and I believe it's more clear and contains less bugs. (LINQ is monadic, and great!)
But it's the 'pure' thing in Haskell that bugs me. Although it's fantastic for making sure no icky stuff is going to happen in your code, personally I don't really mind that my program has unpure things mixed with pure ones. (I like to chuck in a debug 'print' statement here and there). Of course, I can't prove my code is going to run correctly. But I don't really want that either, I just want to build stuff.
For me, Erlang provides the perfect mix between functional and practical. So I'm going to stick to that probably. (But I'm notorious for changing my mind every week, so we'll have to see about that ;-) ) Erlang is easy enough to understand completely without straining my brain. It lacks some of the fancier functional stuff (and types unfortunately), but it makes up for that with OTP. I even like the syntax ;-). Maybe I should try Prolog, or that new Mercury language. Oh, there I go changing my mind again...
Anyway, my copy of 'Erlang Programming' arrived this week, I'm going to spend some quality time with it now!