<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def ask_for_approval(full_changeset=None, params_diff=None, include_verbose=False):
 """Prompt the user for approval to execute a change set. Args: full_changeset (list, optional):
 A list of the full changeset that will be output if the user specifies verbose. params_diff (list, optional):
 A list of DictValue detailing the differences between two parameters returned by :func:`stacker.actions.diff.diff_dictionaries` include_verbose (bool, optional):
 Boolean for whether or not to include the verbose option """

    approval_options = ['y', 'n']
    if include_verbose:
        approval_options.append('v')

    approve = ui.ask("Execute the above changes? [{}] ".format(
        '/'.join(approval_options))).lower()

    if include_verbose and approve == "v":
        if params_diff:
            logger.info(
                "Full changeset:\n\n%s\n%s",
                format_params_diff(params_diff),
                yaml.safe_dump(full_changeset),
            )
        else:
            logger.info(
                "Full changeset:\n%s",
                yaml.safe_dump(full_changeset),
            )
        return ask_for_approval()
    elif approve != "y":
        raise exceptions.CancelExecution