Cast is for visitors where you are visiting some random data
        structure (perhaps returned by a previous ``VisitorPattern.visit()``
        operation), and you want to convert back to the value type.

        This function also takes positional arguments:

            ``value_type=``\ *RecordType*
                The type to cast to.

            ``value=``\ *object*

            ``visitor=``\ *Visitor.Options*
                Specifies the visitor options, which customizes the descent
                and reduction.

def cast(cls, value_type, value, visitor=None, **kwargs):
        """Cast is for visitors where you are visiting some random data
        structure (perhaps returned by a previous ``VisitorPattern.visit()``
        operation), and you want to convert back to the value type.

        This function also takes positional arguments:

            ``value_type=``\ *RecordType*
                The type to cast to.

            ``value=``\ *object*

            ``visitor=``\ *Visitor.Options*
                Specifies the visitor options, which customizes the descent
                and reduction.
        """
        if visitor is None:
            visitor = cls.Visitor(
                cls.grok, cls.reverse, cls.collect, cls.produce,
                **kwargs)

        return cls.map(visitor, value, value_type)