Yeah, so for this to work properly, it would be a bit more complicated of a $watch function.

Something like:

```js
var allowedGetter = $parse(attrs.allowed);
var changes = 0;
var allowed;

try {
  var initialValue = allowedGetter($scope);
} catch {
  allowed = attrs.allowed.split(/\s+/); // This means we support both expressions and literal strings, but
  // Igor would frown upon this for being confusing, so it's probably better to just support one or the other,
  // preferably just the parsed expression.
  allowedGetter.constant = true; // don't register a watcher
}

if (!allowedGetter.constant) {
  $scope.$watch(watchFn, listenerFn);
}

function watchFn() {
  var newval = allowedGetter($scope);
  if (typeof newval === 'string') {
    allowed = newval.split(/\s+/);
  }
  if (angular.isArray(newval) && !angular.equals(newval, allowed)) {
    allowed = newval;
    ++changes;
  } else if (typeof newval !== typeof allowed) {
    allowed = newval;
    ++changes;
  } 
  return changes;
}

function listenerFn() {
  // this doens't really need to do anything since all the work is done in the watch fn
}
```

So I think that would make sense.