docs: private List<SemanticError> check(DataType dataType, Constructor constructor) {
          logger.finer("Checking semantic constraints on data type " + dataType.name + ", constructor " + constructor.name);
          final List<SemanticError> errors = new ArrayList<SemanticError>();
          
          final Set<String> argNames = new HashSet<String>();
          for (Arg arg : constructor.args) {
              if (argNames.contains(arg.name)) {
                  errors.add(_DuplicateArgName(dataType.name, constructor.name, arg.name));
              } else {
                  argNames.add(arg.name);
              }
              errors.addAll(check(dataType, constructor, arg));
          }
          
          return errors;
      }