Atoms are used within a program to denote distinguished values. They are written as strings of consecutive alphanumeric characters, the first character being lowercase. Any element of a tuple can be accessed in constant time. Messages can be sent to and received from ports, but these messages must obey the so-called "port protocol." Haskell features a type system with type inference and lazy evaluation.