If you were a developer with 10 yoe looking for something new to get into, what would you choose at this moment and thinking about the near future: Haskell, Scala or F#?
There is more professional work being done in Scala, and it makes it more palatable to managers that it runs on the JVM and allows them to leverage some of the existing knowledge of their Java programmers.
In the financial world, however, F# use is on the rise.
I currently work in F# but not in finance, and the lack of mature libraries for common things (like JSON serialization!) makes it a major pain in the behind.
Were I told to select a functional language, "quick!", I would select Clojure when caffeinated, and Javascript (ES7) when not.
FWIW: I subscribe to the notion that dynamic typing with unit testing will get you a correct and working program faster than static typing. In the case of Clojure, you now have clojure.spec, which means you can write conformance criteria as functions and generate tests and test data.
Haskell forces you to think in a certain way. So if you want to learn about functional programming, then when you're searching for programming examples all those examples will be in a functional style. You can then apply those styles to Scala or F#. Personally I'd lean towards Scala (on the back of Spark) - there's the Coursera Scala Functional Programming course [1] which will give you a good start.
I've always liked OCaml and with Facebook putting some real momentum behind it and the OCaml/JS story getting better and better all the time I'd say now is a good time to pick it up. It's more pragmatic than Haskell, simpler than Scala, and not tied to the .Net ecosystem like F#.
It depends what you are looking for. If you are looking for work then Scala beats the other two hands down. Then comes F# and Haskell somewhere in the end.
If you're looking for enlightenment, pick up Haskell, maybe OCaml and skip F#.
(For me Scala is the present - I've been doing it full-time for about 6 years now.)
Short answer: whichever you can get a job in. That's more important than the design differences between them, which are relatively small.
Long answer: I wouldn't use F# because nice as it is you're eventually going to want HKT. Between Scala and Haskell I'd pick based on your learning style - Scala lets you write familiar comfortable code and incrementally adopt functional features, Haskell forces you to dive straight in and do things the Right Way from the start.
Having gone down the Haskell rathole, it's clear to me that the advertising is better than the product. It's complex and difficult to learn and the "less errors because of typing" mantra turns into 'how in the world am I supposed to find my error'. In practice, I very rarely run into errors caused by type problems.
I know nothing about F#, but that's actually my criticism of it. The F# community is small. I occasionally hear about people playing with F#, but even that is rare. (although it could be that I just don't know enough about it and F# and it's community is awesome)
Scala has a reasonably sized community and is being used in production plenty. I personally don't see any benefit beyond the fact that some people like the syntax better than Java and can do less boilerplate (which, if not paying attention could lead to higher resource consumption).
If I were looking for something new, I'd look into Go and Rust. Both have strong followings, a lot of active development to learn from, and strong job markets moving forward (IMO). Or alternatively reverse-expand back into C and start playing with embedded RTOSs - which has the benefit of both being very interesting and an area where senior people could make a significant impact.
...
Now, if you really wanted one of the three - I would choose Haskell for learning, Scala for job market, F# if you are already a .net developer.
I'd recommend Scala, even if you are not a JVM lover. The language itself is very un-java-ish, but you can hook it to Java libraries if needed, which is very handy
As far functional languages go, Erlang, Elixir and Scala would get you further career-wise, and if you want to play in the sorta-functional world, Swift is also a high-in-demand language that borrows a lot from Rust and Haskell.
However, Haskell and OCaml are the more classic functional, static-typed languages, and while Haskell has more job opportunities than OCaml, it is probably the steepest learning curve and highest time commitment of all these languages.
If you don't know Haskell or Lisp, I do recommend that you learn those. Now, I don't think they will open any immediate job stream for you (at least not now - Haskell is improving on that direction), but if you want to improve as a developer, you should know those two.
There is more professional work being done in Scala, and it makes it more palatable to managers that it runs on the JVM and allows them to leverage some of the existing knowledge of their Java programmers.
In the financial world, however, F# use is on the rise.
I currently work in F# but not in finance, and the lack of mature libraries for common things (like JSON serialization!) makes it a major pain in the behind.
Were I told to select a functional language, "quick!", I would select Clojure when caffeinated, and Javascript (ES7) when not.
FWIW: I subscribe to the notion that dynamic typing with unit testing will get you a correct and working program faster than static typing. In the case of Clojure, you now have clojure.spec, which means you can write conformance criteria as functions and generate tests and test data.
http://games.greggman.com/game/dynamic-typing-static-typing/
https://news.ycombinator.com/item?id=10933524