No one mentioned OCAML here, so I think It is my "duty" to add this language.
OCAML slightly less "extravagant" than Haskell. It allows you write partially imperative programs in a way that most "non-functional people" would understand. So it is easier to learn and after you did it -- Haskell will be a breeze for you.
OCAML also is VERY strictly typed. If you know exactly what you want then it will be nearly impossible to make a mistake. The language is very fast and has a lot of tools distributed with it. Many people consider the language as alternative for C. Last but not least -- there is a F# language -- .NET version of OCAML supported by Microsoft.
So if I need to quickly check some idea -- I use Mathematica or Haskell. But if I need to write something that should be reliable and stable, so I can share the program with others -- then I use OCAML.