There are no pre-declared modular types. Modular types differ from signed integer types largely by 'wrapping around' their range of values. This declares a new signed integer type whose objects can take values in the range 0 to 15 and an modular type with an equivalent range. When ModularVariable is incremented it wraps around to the start of its range. Thus the resulting value in ModularVariable following execution of the statement above is 0 and no exception is raised.
Modular types have all the pre-declared operations described for the signed types described above.
These operations are supplied by Ada for use with modular types. The type SmallModular can be thought of as a four bit binary value. Modular Demo program as source code. 2.1.2 Real Data Types.