def _traverse(self, input, resolution_data, resolver_method):
<EOL>if len(resolution_data) == <NUM_LIT:0>:<EOL><INDENT>return input<EOL><DEDENT>input = resolver_method(input, resolution_data)<EOL>if isinstance(input, dict):<EOL><INDENT>return self._traverse_dict(input, resolution_data, resolver_method)<EOL><DEDENT>elif isinstance(input, list):<EOL><INDENT>return self._traverse_list(input, resolution_data, resolver_method)<EOL><DEDENT>else:<EOL><INDENT>return input<EOL><DEDENT>
Driver method that performs the actual traversal of input and calls the appropriate `resolver_method` when
to perform the resolution.

:param input: Any primitive type  (dict, array, string etc) whose value might contain an intrinsic function
:param resolution_data: Data that will help with resolution. For example, when resolving parameter references,
    this object will contain a dictionary of parameter names and their values.
:param resolver_method: Method that will be called to actually resolve an intrinsic function. This method
    is called with the parameters `(input, resolution_data)`.
:return: Modified `input` with intrinsics resolved