code: void checkArgValueMatchesAllowedType(List<GraphQLError> errors, Value instanceValue, Type allowedArgType) {
          if (allowedArgType instanceof TypeName) {
              checkArgValueMatchesAllowedTypeName(errors, instanceValue, allowedArgType);
          } else if (allowedArgType instanceof ListType) {
              checkArgValueMatchesAllowedListType(errors, instanceValue, (ListType) allowedArgType);
          } else if (allowedArgType instanceof NonNullType) {
              checkArgValueMatchesAllowedNonNullType(errors, instanceValue, (NonNullType) allowedArgType);
          } else {
              assertShouldNeverHappen("Unsupported Type '%s' was added. ", allowedArgType);
          }
      }
docs: Recursively inspects an argument value given an allowed type.
  Given the (invalid) SDL below:
  
  directive @myDirective(arg: [[String]] ) on FIELD_DEFINITION
  
  query {
  f: String @myDirective(arg: ["A String"])
  }
  
  it will first check that the `myDirective.arg` type is an array
  and fail when finding "A String" as it expected a nested array ([[String]]).
  @param errors validation error collector
  @param instanceValue directive argument value
  @param allowedArgType directive definition argument allowed type