generic_formal_part subprogram_specification;
generic_formal_part package_specification;
formal_object_declaration
| formal_type_declaration
| formal_subprogram_declaration
| formal_package_declaration
Size : Natural; --formal object
Length : Integer := 200; --formal object with a default expression
type Item is private; --formal type
type Index is (<>); --formal type
type Row is array(Index range <>) of Item; --formal type
with function "<"(X, Y : Item) return Boolean; --formal subprogram
type Elem is private;
procedure Exchange(U, V : in out Elem);
type Item is private;
with function "*"(U, V : Item) return Item is <>;
function Squaring(X : Item) return Item;
type Item is private;
type Vector is array (Positive range <>) of Item;
with function Sum(X, Y : Item) return Item;
package On_Vectors is
function Sum (A, B : Vector) return Vector;
function Sigma(A : Vector) return Item;
Length_Error : exception;
end On_Vectors;