Atoms are used within a program to denote distinguished values. The arguments can be primitive data types or compound data types. Messages can be sent to and received from ports, but these messages must obey the so-called "port protocol." The sequential subset of Erlang supports eager evaluation, single assignment, and dynamic typing. Make me a sandwich.