code: def filter(self, predicate: Callable[[T], bool]) -> 'Option[T]':
          
          if self._is_some and predicate(self._val):
              return self
          return cast('Option[T]', NONE)
docs: Returns :py:data:`NONE` if the :py:class:`Option` is :py:data:`NONE`,
          otherwise filter the contained value by ``predicate``.
  
          Args:
              predicate: The fitler function.
  
          Returns:
              :py:data:`NONE` if the contained value is :py:data:`NONE`, otherwise:
                  * The option itself if the predicate returns True
                  * :py:data:`NONE` if the predicate returns False
  
          Examples:
              >>> Some(0).filter(lambda x: x % 2 == 1)
              NONE
              >>> Some(1).filter(lambda x: x % 2 == 1)
              Some(1)
              >>> NONE.filter(lambda x: True)
              NONE