Вот как lists:concat/1
реализован в модуле stdlib / lists:
concat(List) ->
flatmap(fun thing_to_list/1, List).
Где:
flatmap(F, [Hd|Tail]) ->
F(Hd) ++ flatmap(F, Tail);
flatmap(F, []) when is_function(F, 1) -> [].
и
thing_to_list(X) when is_integer(X) -> integer_to_list(X);
thing_to_list(X) when is_float(X) -> float_to_list(X);
thing_to_list(X) when is_atom(X) -> atom_to_list(X);
thing_to_list(X) when is_list(X) -> X. %Assumed to be a string
Итак, lists:concat/1
фактически использует оператор ++.