code: public <ABS, IMPL extends ABS> InjectorConfiguration withScopedCollectedAlias(
          Class scope,
          Class<ABS> abstractDefinition,
          Class<IMPL> implementationDefinition
      ) {
          //noinspection unchecked
          ImmutableScope<Class, ImmutableMap<Class, ImmutableList<Class>>> newCollectedAliases =
              collectedAliases.withModified(
                  scope,
                  (value) -> {
                      value = value.withPutIfAbsent(abstractDefinition, new ImmutableArrayList<>());
                      return value
                          .withPut(
                              abstractDefinition,
                              value
                                  .get(abstractDefinition)
                                  .withAdd(implementationDefinition)
                          );
                  }
docs: This method allows for specifying one _possible_ alias. Whenever a collection (list, set, etc) of the interface
  is requested, the injector will instantiate all of these possibilities in order and pass the created list to the
  instance.
  
  This is especially useful when creating a plugin-type scenario where different modules can supply implementations
  to a specific interface.
  
  This method has no bearing on the scenario when a single instance is requested.
  
  @param abstractDefinition the abstraction to alias.
  @param implementationDefinition the actual implementation to collect.
  @param <ABS> the abstraction type.
  @param <IMPL> the implementation type.
  
  @return a modified copy of this injection configuration.