code: protected List<TypeNameWithArity> createTypeArityList(
        TypeName t, String extractVariableName, int maxArity) {
      TypeName u = match(t)
          .when(typeOf(TypeVariableName.class))
          .get(x -> (TypeName) TypeVariableName.get("E" + x.name, x))
          .orElse(x -> x)
          .getMatch();
  
      List<TypeNameWithArity> typeArityList = new ArrayList<>();
      //typeArityList.add(TypeNameWithArity.of(t, 0));
      typeArityList.add(TypeNameWithArity.of(ParameterizedTypeName.get(MATCH_EXACT, t), 0));
      typeArityList.add(TypeNameWithArity.of(ParameterizedTypeName.get(MATCH_ANY, t), 1));
      //typeArityList.add(TypeNameWithArity.of(TypeName.get(MatchesAny.class), 1));
      IntStream.rangeClosed(0, maxArity).forEach(
          extractArity -> {
            TypeName[] typeVariables = createTypeVariables(u, extractVariableName, extractArity);
            typeArityList.add(
                TypeNameWithArity.of(
                    ParameterizedTypeName
                        .get(
                            ClassName.get(getDecomposableBuilderByArity(extractArity)),
                            typeVariables), extractArity));
          });
  
      return typeArityList;
    }
docs: Returns a list of pairs of types and arities up to a given max arity.