docs: def iterable_validator(iterable_type, member_type):
      """Validator for ``attrs`` that performs deep type checking of iterables."""
  
      def _validate_tuple(instance, attribute, value):
          # pylint: disable=unused-argument
          """Validate that a dictionary is structured as expected.
  
          :raises TypeError: if ``value`` is not of ``iterable_type`` type
          :raises TypeError: if ``value`` members are not all of ``member_type`` type
          """
          if not isinstance(value, iterable_type):
              raise TypeError('"{name}" must be a {type}'.format(name=attribute.name, type=iterable_type))
  
          for member in value:
              if not isinstance(member, member_type):
                  raise TypeError(
                      '"{name}" members must all be of type "{type}"'.format(name=attribute.name, type=member_type)
                  )
  
      return _validate_tuple