def map(self, callback: Callable[[T], U]) -> 'Option[U]':
        """
        Applies the ``callback`` with the contained value as its argument or
        returns :py:data:`NONE`.

        Args:
            callback: The callback to apply to the contained value.

        Returns:
            The ``callback`` result wrapped in an :class:`Option` if the
            contained value is ``Some``, otherwise :py:data:`NONE`

        Examples:
            >>> Some(10).map(lambda x: x * x)
            Some(100)
            >>> NONE.map(lambda x: x * x)
            NONE
        """
        return self._type.Some(callback(self._val)) if self._is_some else cast('Option[U]', NONE)