public final <T> ConfigurationModule set(Impl<T> opt, Class<? extends T> impl) {
   ConfigurationModule c = deepCopy();
   c.processSet(opt);
   if (c.builder.setOpts.contains(opt)) {
     c.setImplSets.put(opt, impl);
   } else {
     c.setImpls.put(opt, impl);
   }
   return c;
 }
 public final <T> ConfigurationModule set(Param<T> opt, String val) {
   ConfigurationModule c = deepCopy();
   c.processSet(opt);
   if (c.builder.setOpts.contains(opt)) {
     c.setParamSets.put(opt, val);
   } else {
     c.setParams.put(opt, val);
   }
   return c;
 }
 /**
  * Binds a list to a specfici optional/required Param using ConfigurationModule.
  *
  * @param opt target optional/required Param
  * @param implList List object to be injected
  * @param <T>
  * @return
  */
 public final <T> ConfigurationModule set(Param<List> opt, List implList) {
   ConfigurationModule c = deepCopy();
   c.processSet(opt);
   c.setParamLists.put(opt, implList);
   return c;
 }