Как сказал Тимур, требуемый должен быть постоянным в своем объеме. Это позволяет вам делать некоторые приятные вещи, такие как объявление типа внутри процедуры. Посмотрите на это, это может быть интересно:)
-- My ada program --
with Ada.Text_IO, Ada.Integer_Text_IO;
use Ada.Text_IO, Ada.Integer_Text_IO;
procedure Main is
procedure Test (Wanted : Integer) is
type custom is new Integer range 0..wanted;
begin
Put_Line("First value " & Custom'Image (Custom'First)
& " Last value " & Custom'Image (Custom'Last));
end Test;
begin
Test (10);
Test (12);
end Main;
Вывод
First value 0 Last value 10
First value 0 Last value 12
В этом случае ваш тип отличается от одного вызова к другому, но работает как требуемый является постоянным в процедуре. Единственное, что определенный тип должен быть новым производным типом типа вашего параметра.
Я позволю вам подумать о возможностях:)