def add_modifier(self, modifier, keywords, relative_pos,
                     action, parameter=None):
        """Modify existing tasks based on presence of a keyword.

        Parameters
        ----------
        modifier : str
            A string value which would trigger the given Modifier.
        keywords : iterable of str
            sequence of strings which are keywords for some task,
            which has to be modified.
        relative_pos : int
            Relative position of the task which should be modified
            in the presence of `modifier`. It's value can never be 0. Data
            fields should also be considered when calculating the relative
            position.
        action : str
            String value representing the action which should be performed
            on the task. Action represents calling a arbitrary function
            to perform th emodification.
        parameter : object
            value required by the `action`.(Default None)
        """
        if relative_pos == 0:
            raise ValueError("relative_pos cannot be 0")
        modifier_dict = self._modifiers.get(modifier, {})
        value = (action, parameter, relative_pos)
        for keyword in keywords:
            action_list = list(modifier_dict.get(keyword, []))
            action_list.append(value)
            modifier_dict[keyword] = tuple(action_list)
        self._modifiers[modifier] = modifier_dict