Example: 

type Color = (White, Red, Orange, Yellow, Green, Blue, Purple, Black); Sex = (Male, Female); Day = (Mon, Tue, Wed, Thu, Fri, Sat, Sun); Operators = (Plus, Minus, Times, Divide); Continent = (Africa, Antarctica, Asia, Europe Australia, NorthAmerica, SouthAmerica); 

Incorrect example: 

type Workday (Mon, Tues, Wed, Thur, Fri, Sat); Free = (Sat, Sun); 

because the type of Sat is ambiguous. 

You are already acquainted with the predefined type Boolean defined as: 

type Boolean = (false, true); 

This automatically defines the constant identifiers false and true and specifies that false < true. 

The relational operators =, <>, <, <=, >=, and >, are applicable to all enumerated types provided both operands are of the same type. The order is determined by the sequence in which the constants are listed. 

Predeclared functions with arguments of ordinal types are: 

succ (X) e.g. succ (Blue) pred(X) ord(X) pred(Blue) ord(Blue) = 2 Yellow the successor of x Red the predecessor of x the ordinal number of x 

Assuming that C and C1 are of type Color (above), B is of type Boolean, and Sl ... Sn are arbitrary statements, then the following are meaningful statements: 

for C := Black downto Red do Sl; while (C1 <> C) and B do Sl; if C > White then C := pred(C); case C of end Red, Blue, Yellow: Sl; Purple: S2; Green, Orange: S3; White, Black: S4 

