Все эти warning собрал в этом примере:
construct(Input) ->
construct(<<"init">>, Input).
construct(<<Acc/binary>>, [Atom | Tail]) when is_atom(Atom) ->
construct(Acc, [erlang:atom_to_binary(Atom, utf8) | Tail]);
construct(<<Acc/binary>>, [List | Tail]) when is_list(List) ->
construct(Acc, [erlang:list_to_binary(List) | Tail]);
construct(<<Acc/binary>>, [<<Binary/binary>> | Tail]) ->
construct(<<Acc/binary, Binary/binary>>, Tail);
construct(<<Acc/binary>>, []) ->
Acc.