Unqualified functions shadow as stated previously. This results in the following order within a module, outermost to innermost:
- Predefined BIFs (same as in vanilla Erlang)
- Predefined LFE BIFs
- Top-level defines
This means that it is perfectly legal to shadow BIFs by imports,
BIFs/imports by top-level functions and BIFs/imports/top-level by
fletrecs. In this respect there is nothing special about BIfs, they
just behave as prefined imported functions, a whopping big
(from erlang ...)). EXCEPT that we know about guard BIFs and
expression BIFs. If you want a private version of
spawn then define
it, there will be no warnings.
CAVEAT: This does not hold for the supported core forms. These can be shadowed by imports or redefined but the compiler will always use the core meaning and never an alternative. Silently!