code: def itertypes(iterable):
      
      seen = set()
      for entry in iterable:
          if isinstance(entry, tuple):
              for type_ in entry:
                  if type_ not in seen:
                      seen.add(type_)
                      yield type_
          else:
              if entry not in seen:
                  seen.add(entry)
                  yield entry
docs: Iterates over an iterable containing either type objects or tuples of
      type objects and yields once for every type object found.