I don't remember much of Ada, but here's something very basic I liked (had to look the details up):
You could declare custom integer types like this:
type My_Type is range -5 .. 10;
And then you could reference the range with My_Type'First or My_Type'Last
And there were named parameters.
for A in Range_Type loop
I_IO.Put (
Item => A,
Width => 3,
Base => 10);
...
end loop;