На самом деле, там большая проблема это как сделать понятную и удобную систему типов. Если кто подскажет -- буду рад

b : BYTE

b := b + 1;

Должен ли такой код работать?

А такой?

b : BYTE
w : WORD

b := 0;
w := b - 1; (* должно ли получиться 16#ffff или 16#00ff? *)

С технической точки зрения это дребедень, а не код, ведь, в BYTE и WORD являются наследниками типа ANY_BIT, а для этого типа не определены операции сложения и вычитания.

Тем не менее, подозреваю, что у всех в проектах есть сложение, вычитание, и, возможно даже умножение.
Поэтому остаётся либо запретить вообще подобные типы (ну прямо запретить сложение WORD'ов), либо ещё что-то.


Если посмотреть как сделана система типов, например, в java, то там любое сложение даёт int. Т.е. даже byte+byte складываем -- сразу получается int (это 4 байта).
Ещё есть особенный случай когда складывается long с чем-нибудь (там тоже получается long).

С одной стороны, конечно, странно всё время "добавлять приведения назад к байту", с другой, это снимает кучу головной боли.
Например, при таком подходе w окажется именно 16#ffff, а никак не 16#00ff.