@classmethod
def choose(cls, *types):
    """Decorator to force `Maybe` values constraining to expecting types.

        For example, a function that return a collection (tuple or list) if
        valid or False if not, if not decorated could be ambiguous for an
        empty collection::

            >>> @Just.choose(tuple, list)
            ... def check_range(values, min, max):
            ...     if isinstance(values, (tuple, list)):
            ...         return [v for v in values if min <= v <= max]
            ...     else:
            ...         return False

            >>> check_range(range(10), 7, 17)
            [7, 8, 9]

            >>> check_range(range(10), 17, 27)
            Just([])

            >>> check_range(set(range(10)), 7, 17)
            False

        """
    pass
