Consider the following 2 files. 'one' would not be effected by code changes and reloading. 'two' would be effected. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -module(one). -export([foo/0, start_link/0]). start_link() -> spawn(?MODULE, foo, []). foo() -> receive {From, say} -> From ! bar(), foo() %% a local fun end. %bar() -> % "hello". bar() -> "night". %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -module(two). -export([foo/0, start_link/0]). start_link() -> spawn(?MODULE, foo, []). foo() -> receive {From, say} -> From ! bar(), ?MODULE:foo() %% an external fun end. %bar() -> % "hello". bar() -> "night". %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%