Una unidad genérica (subprograma genérico o paquete genérico) es una plantilla parametrizada a partir de la que se pueden obtener, concretando los parámetros, unidades no genéricas que se conocen como instancias de la unidad genérica correspondiente.
Una unidad genérica se compone de una declaración genérica (generic_declaration) y un cuerpo, que es igual que el de cualquier unidad no genérica (procedimiento, función o paquete).
generic_declaration ::= generic_subprogram_declaration | generic_package_declaration generic_subprogram_declaration ::= generic_formal_part procedure defining_program_unit_name [formal_part]; | generic_formal_part function defining_designator [formal_part] result_profile; generic_package_declaration ::= generic_formal_part package_specification; generic_formal_part ::= generic {generic_formal_parameter_declaration | use_clause}
generic_formal_parameter_declaration ::= formal_object_declaration | formal_type_declaration | formal_subprogram_declaration | formal_package_declaration
-- Declaración de un procedimiento genérico generic type Tipo is private; with function "<"(X,Y: Tipo) return Boolean; type Indice is (<>); type Lista is array(Indice range <>) of Tipo; procedure Ordenar(L: in out Lista);
-- Declaración de un paquete genérico generic type T_Elemento is private; package Pilas is ... end Pilas;