docs: def register_converter(self, converter: Converter[S, T]):
          """
          Utility method to register any converter. Converters that support any type will be stored in the "generic"
          lists, and the others will be stored in front of the types they support
          :return:
          """
          check_var(converter, var_types=Converter, var_name='converter')
  
          # (0) sanity check : check that parser handles jokers properly
          res = converter.is_able_to_convert_detailed(from_type=JOKER, to_type=JOKER, strict=True)
          if not (res[0] is True and res[1] is None and res[2] is None):
              raise ValueError('Converter ' + str(converter) + ' can not be registered since it does not handle the JOKER'
                               ' cases correctly')
  
          # compute all possible chains and save them
          generic_chains, generic_nonstrict_chains, specific_chains, specific_nonstrict_chains \
              = self._create_all_new_chains(converter)
          self._generic_nonstrict_conversion_chains += generic_nonstrict_chains
          self._generic_conversion_chains += generic_chains
          self._specific_non_strict_conversion_chains += specific_nonstrict_chains
          self._specific_conversion_chains += specific_chains
  
          # sort all lists by length
          self._generic_nonstrict_conversion_chains = sorted(self._generic_nonstrict_conversion_chains, key=len,
                                                             reverse=True)
          self._generic_conversion_chains = sorted(self._generic_conversion_chains, key=len, reverse=True)
          self._specific_non_strict_conversion_chains = sorted(self._specific_non_strict_conversion_chains, key=len,
                                                               reverse=True)
          self._specific_conversion_chains = sorted(self._specific_conversion_chains, key=len, reverse=True)