Identifiers are used to give names to several classes of language
objects and refer to these objects by name later:
value names (syntactic class value-name),
value constructors (constant -- class cconstr-name -- or
non-constant -- class ncconstr-name),
labels (label-name),
variant tags (tag-name),
type constructors (typeconstr-name),
record fields (field-name),
class names (class-name),
method names (method-name),
instance variable names (inst-var-name),
module names (module-name),
module type names (modtype-name).
These nine name spaces are distinguished both by the context and by the
capitalization of the identifier: whether the first letter of the
identifier is in lowercase (written lowercase-ident below) or in
uppercase (written capitalized-ident). Underscore is considered a
lowercase letter for this purpose.