I've written a little bit of erlang, so I can offer a few reasons why it isn't used widely.
Erlang does not have a string data type. All it has are lists of ints smaller than 256.
1> [98, 114, 111, 107, 101, 110] == "broken".
true
If statements are just wrong.
if
X == 1 ->
io:format("you picked one\n");
X == 2 ->
io:format("you picked two\n")
end
If X == 3 an exception is raised. You also can't call functions in if statements. This won't compile:
if
p(X) ->
io:format("Predicate is true for X!\n");
true ->
ok
end
The syntax is unfamiliar (e.g., {} is tuple) and also fugly. You've got 3 separate line terminators, namely ; , . all of which are used at different times.
Records are also broken. In most languages, x.field addresses the field of a record. In erlang, x#ClassName.field is necessary, since records are actually just a macro which compiles down to tuples.
I actually rather like erlang. But make no mistake: it's a domain specific language for message passing. It's not a general purpose programming language, even if it is Turing complete.