@classmethod
def recurse(cls, obj, path, seen, *args):
    """
        Handle recursion of the schema.  By default, raises :class:`RecursionError` when a node is
        discovered again during a single call.

        If :attr:`.Walker.RECURSE` is returned, the node will be processed again.  Otherwise, the
        resulting value (including ``None``) will be used for the inner repeat of this node without
        any further processing.

        Arguments:
            obj (.Schema):
                Schema node.
            path (str):
                Path taken through the schema from the root.
            seen (.Schema list):
                Nodes already visited in the schema.

        Raises:
            RecursionError:
                To block looping through the same portion of the schema.
        """
    raise RecursionError(cls._at_path(repr(obj), path))
