Faced with many choices, help me decide which functional programming language to learn. Just as important as making a recommendation, please tell me why you made your choice. For kicks, saying don't bother is also a choice.
What do you want to do? If you can only learn one "functional" language and you do anything with the web, I'd recommend Javascript (if you don't already know it). It's viable in the front and backends.<p>I'd personally recommend Haskell. It's going to stretch your brain (in a good way), and helps reinforce all the "functional" concepts. It's one of the very few purely functional languages, and it does have a bit of a learning curve to get started with, but I think it's worth the work. There's a lot of library support, and almost all the sample code you find online in tutorials is well written. You can pretty much do whatever you'd like with Haskell (Web servers like Yesod, to all kinds of fun AI/ML stuff). If you're into computer science theory, you'll find as much as you'd ever want with Haskell. The GHC (compiler) has particularly good support for concurrency and parallelism (likely in most cases as good or better performance than Erlang).<p>If you're a quant looking into building a trading algorithm OCaml is a good choice.
Erlang seems to be making headway... <a href="http://news.ycombinator.com/item?id=2866337" rel="nofollow">http://news.ycombinator.com/item?id=2866337</a>
Ocaml is probably the one at the sweet spot since its fairly practical (reasonable number of libraries and a good compiler) and has a simple-but-effective core type system (ADTs + modules). Plus you can transition to F# later if you want more libraries. Haskell wouldn't be a terrible choice either -- just be warned that it is more difficult and idiosyncratic (laziness + type classes + monads + random GHC extensions that do strange things).
Haskell has definitely been the most rewarding programming language to learn for me personally. It's fairly unique in many ways, and really forces you to think in functional terms (unlike many other functional languages, which make it easy to drop back to OO or imperative style).<p>However, Scala was the "gateway" language that helped me grok the core functional concepts after a long history of doing just OOP.
<a href="http://learnyouahaskell.com/" rel="nofollow">http://learnyouahaskell.com/</a><p>^^ one of the most interesting (and entertaining) experiences I've had learning a programming language