derived type of %aset is the array element type if it's an array. Otherwise, we return the type of the new value. This is a hack and should be fixed in some other way.