<div dir="ltr">Please, have a look at this example:<br><br><a href="http://tryerl.seriyps.ru/#id=e8b4">http://tryerl.seriyps.ru/#id=e8b4</a><br><br><span style="font-family:monospace">-module(main).<br>-export([main/0]).<br><br>-define(FUNCTION_STRING, atom_to_list(?FUNCTION_NAME) ++ "/" ++<br>          integer_to_list(?FUNCTION_ARITY)).<br>         <br>main() -><br>    ?FUNCTION_STRING.<br></span><br>If you select "compile to: core erlang" or "compile to: static single assignment" (which are different intermediate representations of Erlang code on different compilation stages) you may notice that `atom_to_list` as well as `++` calls are eventually replaced with string literal.<br><br>.core:<br><br><span style="font-family:monospace">'main'/0 =<br>    %% Line 8<br>    ( fun () -><br>        %% Line 9<br>    [109|[97|[105|[110|[47|[48]]]]]]<br>      -| [{'function',{'main',0}}] )</span><br><br>.ssa:<br><br><span style="font-family:monospace">%% main.erl:8<br>%% Counter = 3<br>function `main`:`main`() {<br>0:<br>  ret `"main/0"`<br>}</span><br><br><br><br>Why do you think the beam file still contains `atom_to_list` calls?</div>