Sorry for the long paragraphs everyone. I do have a mildly verbose writing style due to the unhealthy combination of using paragraphs to separate discussion subjects, and being very bad at keeping text short (especially in a non-native language like English). I’ll try to do better.
I have a similar impression.
There have been many attempts in the past to bring a functional flavour to imperative languages (Scala of course, but also Python, C++11, Java 8…), and functional languages have always had to keep a dirty imperative corner around because a program with zero side-effects cannot send any output out of the CPU and is therefore of little use. But anytime you learn any of these languages, you can distinctly feel what is the preferred path, and what has been glued on top.
Rust is quite impressive at bringing the two paradigms together, probably in no small part because it made the hard choice of doing away with inheritance, which adds a lot of complexity if done right (with covariance and contravariance for example), and decidedly does not play so well with functional constructs like pattern matching.
Personally, my gateway drug into functional programming was OCaml, but that’s probably because I live in the native country of that language and we have some awesome teachers of it around.
Erlang is definitely an intriguing beast. For example, the error handling and software update strategy seems very unique compared to anything I’ve played with before. From personal experience, it can be hard to get into due to accumulated syntactic warts (like older Fortrans if you’ve played with that). But from a quick PM conversation with @josephDunne from the telecoms thread, Elixir seems to fix that without destroying the overall spirit of the language. So probably that’s what I’m going to try in my next learning attempt.