In reply to Michael54:
The LRM section 6.8 Variable declarations and the BNF A.2.2.1 Net and variable types do not allow it.
data_type ::=
integer_vector_type [ signing ] { packed_dimension }
| integer_atom_type [ signing ]
byte is an integer_atom_type. The reason behind this rule is mostly historical.
In Verilog and many programming languages, the width of atom types like integer, byte, int are left unspecified. It was this way in early versions of SystemVerilog as well. Packing an unsized integer into a struct or array does not make much sense.
Also prior to SystemVerilog some Verilog coders were using
integer [63:0] myvar;
indicating you wanted
myvar to be a 64-bit integer. However, no tool ever implemented this, they just ignored it. That created legacy code issues because you didn’t know if they were trying to specify a 64-bit integer, or 64-32-bit packed vectors.
History aside, the current SystemVerilog syntax makes it very clear how many dimensions you are working with and the bit range ordering you want.