12.5.3 Formal Array Types
The category determined for a formal array type is 
the category of all array types. 
Syntax
Legality Rules
For a formal array 
subtype, the actual subtype shall satisfy the following conditions: 
The formal array type and the actual array type 
shall have the same dimensionality; the formal subtype and the actual 
subtype shall be either both constrained or both unconstrained.
For each index position, the index types shall 
be the same, and the index subtypes (if unconstrained), or the index 
ranges (if constrained), shall statically match (see 
4.9.1). 
 
The component subtypes of the formal and actual 
array types shall statically match. 
 
If the formal type has aliased components, then 
so shall the actual. 
Examples
Example of formal 
array types: 
--  given the generic package 
generic
   type Item   is private;
   type Index  is (<>);
   type Vector is array (Index range <>) of Item;
   type Table  is array (Index) of Item;
package P is
   ...
end P;
--  and the types 
type Mix    is array (Color range <>) of Boolean;
type Option is array (Color) of Boolean;
--  then Mix can match Vector and Option can match Table 
package R is new P(Item   => Boolean, Index => Color,
                   Vector => Mix,     Table => Option);
--  Note that Mix cannot match Table and Option cannot match Vector
Ada 2005 and 2012 Editions sponsored in part by Ada-Europe