docs: def merge_components(
          *components: typing.List[typing.Union[list, tuple, COMPONENT]]
  ) -> COMPONENT:
      """
      Merges multiple COMPONENT instances into a single one by merging the
      lists of includes and files. Has support for elements of the components
      arguments list to be lists or tuples of COMPONENT instances as well.
  
      :param components:
      :return:
      """
  
      flat_components = functools.reduce(flatten_reducer, components, [])
      return COMPONENT(
          includes=functools.reduce(
              functools.partial(combine_lists_reducer, 'includes'),
              flat_components,
              []
          ),
          files=functools.reduce(
              functools.partial(combine_lists_reducer, 'files'),
              flat_components,
              []
          )
      )