docs: public static String print(RefType type) {
          return type.match(new RefType.MatchBlock<String>() {
  
              @Override
              public String _case(ClassType x) {
                  final StringBuilder builder = new StringBuilder(x.baseName);
                  if (!x.typeArguments.isEmpty()) {
                      builder.append("<");
                      boolean first = true;
                      for (RefType typeArgument : x.typeArguments) {
                          if (first) {
                              first = false;
                          } else {
                              builder.append(", ");
                          }
                          builder.append(print(typeArgument));
                      }
                      builder.append(">");
                  }
                  return builder.toString();
              }
  
              @Override
              public String _case(ArrayType x) {
                  return print(x.heldType) + "[]";
              }});
      }