> Do you refer to Erlang excelling in distributed concurrency, due to how its built to rely on the actor model? Or Erlang also excels in concurrency on a single machine?
Erlang has great concurrency also on a single machine. That is scales well to clusters is of course also good. And yes, it is the actor model that makes it work so well. That the individual processes are written in a (mostly) functional language is less important, I think. It could have been an imperative language and it wouldn't have made much difference, as long as process state was still isolated from other processes.
> Btw, what are some of those other things hampering Haskell's performance with parallel computing? Wouldn't the garbage collector mainly produce pauses instead of really destroying parallel performance?
Haskell's garbage collector is pretty slow when run on multiple cores, and when run on a single core it becomes a bottleneck to parallelism (and can also trash the caches of the other cores). I don't know all the specific technical details of GHCs GC, though.
Another problematic thing is laziness, which is operationally control flow plus side effects. Those are exactly the things that make efficient parallelism difficult.
> Although a concurrent garbage collector has recently been merged to the nightly GHC.
A concurrent GC is a different thing, that interleaves garbage collection with ordinary computation. That can be very useful, but it doesn't help with exploiting more cores.