docs: def list_dir(self, filter_fn=None) -> 'Tuple[Path, ...]':
          """
          * the `self` Path object is assumed to be a directory
  
          :param filter_fn:
              a `None` object or
              a predicative function `str -> bool` which will be applied on the
              filename/directory in `self` directory.
  
          :return:
              a tuple of Path objects
              each of which represents a file/directory
              in `self` directory.
  
              If the filter_fn is not None,
              each item in return tuple whose filename/directory name
              doesn't match the `filter_fn` will filtered.
  
          e.g:
              - Dir1
                  - File.py
                  - File.pyi
                  - File.pyx
              Dir1.list_dir(lambda path: '.py' in path)
              => [<Path object of File1.py>]
  
              Dir1.list_dir(lambda path: print(path))
              IO:
                File.py
                File.pyi
                File.pyx
              => []
          """
  
          path = str(self)
          items = os.listdir(path)
          if filter_fn is not None:
              items = filter(filter_fn, items)
  
          return tuple(Path(path_join((path, item))) for item in items)