I have returned to functional programming after more than 10 years of C, C++, C# and Java, and it feels good. The old favorite is of course Lisp, but much has happened in the field since I was active, and I thought I should check out the statically typed languages, such as Haskell. Well, it turned out to be a fairly unpleasant experience. Not because it was hard to make programs - the program structure in Scheme is fairly similar to Haskell - but because the typing system keeps getting in the way of my iterative way of programming. I want to write some code, play with it, extend it, play with it some more, and let it grow step by step. In Haskell, like in statically typed imperative languages, I seem to spend most of the time fixing type errors instread. Of course they have to be taken care off, but not when I'm prototyping!
But perhaps I found a good compromise: Lisp syntax, Haskell-like functional programming, optional type checking, lots of libraries. Qi seems to mix the best of two worlds, and so far it has been a joy to use. First prototype your application, then turn on type checking, fix the errors and you should have a pretty robust program without the Haskell straitjacket. That is my hope, time will tell if it works out in practice.