A restriction to constants in sizes seems way too strong. In particular, a very common situation is a function that takes an array as input and returns a new array with the same dimensions. So, I think you need to be able to handle expressions here.
Björn