docs: def typeinfo(cls, propinfo, type_parameters, value_type, visitor):
          """Like :py:meth:`normalize.visitor.VisitorPattern.reduce`, but returns
          the final dictionary to correspond to a type definition.  The default
          implementation returns just the type name, the list of properties, and
          the item type for collections.
          """
          propspec = dict((prop.name, info) for prop, info in propinfo)
          ts = {'name': value_type.__name__}
          if propspec:
              ts['properties'] = propspec
          if type_parameters:
              ts['itemtype'] = type_parameters
          return ts