docs: def chain(*args):
      """itertools.chain, just better"""
      has_iter = partial(hasattr, name='__iter__')
      # check if a single iterable is being passed for
      # the case that it's a generator of generators
      if len(args) == 1 and hasattr(args[0], '__iter__'):
          args = args[0]
  
      for arg in args:
          # if the arg is iterable
          if hasattr(arg, '__iter__'):
              # iterate through it
              for i in arg:
                  yield i
          # otherwise
          else:
              # yield the whole argument
              yield arg