docs: def replace_spaces(s, replacer):
      # type: (str, Callable[[int, str], str]) -> str
      """
      >>> replace_spaces('ab', lambda n, l: '_' * n)
      'ab'
      >>> replace_spaces('a b', lambda n, l: '_' * n)
      'a_b'
      >>> replace_spaces(' ab', lambda n, l: '_' * n)
      '_ab'
      >>> replace_spaces('  a b ', lambda n, s: s * n)
      'leftleftacenterbright'
      >>> replace_spaces(' a b  ', lambda n, _: '0 0' * n)
      '0 0a0 0b0 00 0'
      """
      def replace(m):
          # type: (Match[str]) -> str
          if m.start() == 0:
              side = 'left'
          elif m.end() == len(s):
              side = 'right'
          else:
              side = 'center'
          return replacer(len(m.group()), side)
  
      return re.sub(r'[ ]+', replace, s)