code: @Override
      public Object invoke(Object[] vals) throws InvocationTargetException {
          if (vals[optional] == TAG) {
              // TODO: primitive types!!
              // TODO: side effects on "vals"?
              vals[optional] =
                  new ClassRef(getParameterTypes()[optional]).getDefault();
          }
          return with.invoke(vals);
      }
docs: --