docs: def of_type(self, classinfo):
          '''Filters elements according to whether they are of a certain type.
  
          Note: This method uses deferred execution.
  
          Args:
              classinfo: If classinfo is neither a class object nor a type object
                  it may be a tuple of class or type objects, or may recursively
                  contain other such tuples (other sequence types are not
                  accepted).
  
          Returns:
              A Queryable over those elements of the source sequence for which
              the predicate is True.
  
          Raises:
              ValueError: If the Queryable is closed.
              TypeError: If classinfo is not a class, type, or tuple of classes,
                  types, and such tuples.
          '''
          if self.closed():
              raise ValueError("Attempt to call of_type() on a closed "
                               "Queryable.")
  
          if not is_type(classinfo):
              raise TypeError("of_type() parameter classinfo={0} is not a class "
                  "object or a type objector a tuple of class or "
                  "type objects.".format(classinfo))
  
          return self.where(lambda x: isinstance(x, classinfo))