Bug Bounties

How to write a meaningful typehint for a function that returns a filter?

Assume the following function ``` def get_list_of_nums_and_square_nums_with_last_digit_9() -> List[Tuple[int, int]]: sqr = lambda n: n * n is_last_digit_9 = lambda n: n % 10 == 9 is_last_digit_of_square_num_9 = lambda t: (lambda n, n_squared: is_last_digit_9(n_squared))(*t) nums_and_square_nums = map(lambda n: (n, sqr(n)), range(10)) return list(filter(is_last_digit_of_square_num_9, nums_and_square_nums)) ``` which would return ``` >>> get_list_of_nums_and_square_nums_with_last_digit_9() [(3, 9), (7, 49)] ``` . Now I want an equivalent function, but returning a iterator - or more specifically a filter: ``` def get_nums_and_square_nums_with_last_digit_9(): sqr = lambda n: n * n is_last_digit_9 = lambda n: n % 10 == 9 is_last_digit_of_square_num_9 = lambda t: (lambda n, n_squared: is_last_digit_9(n_squared))(*t) nums_and_square_nums = map(lambda n: (n, sqr(n)), range(10)) return filter(is_last_digit_of_square_num_9, nums_and_square_nums) ``` Which type hints can I use so that we can clearly see the structure of the result, when the resulting filter is applied? Is `Iterator[Tuple[int, int]]` correct? Or is there a more precise way to do it? Somehow it should be possible to determine the elements' structure `Tuple[int, int]` from the typehint.