[erlang-questions] ++ operator

Michał Ptaszek <>
Wed Oct 31 18:24:15 CET 2012


I ran into a weird bug in my system (R15B02), namely I was trying to
append a non-list item to a tail of the list by running:
List ++ Item

Nonetheless, as long as the list is empty the result of this expression is:
[] ++ Item == Item

For instance:
3> [] ++ {a, b}.

On the other hand,
5> a ++ [].
** exception error: bad argument
     in operator  ++/2
        called as a ++ []

Does Erlang have a built-in optimizations such as?:
++([], B) -> B;
++(A, B) -> lists:append([A, B]).

If so, it would be nice to add a guard:
++([], B) when is_list(B) -> B;
++(A, B) -> lists:append([A, B]).

Kind regards,
Michal Ptaszek

More information about the erlang-questions mailing list