anchor.diff:      TaskList = gb_trees:to_list(GroupMap),
       send_outputs_to_consumers(S, TaskList, ModifiedGroups).
   
  +-spec send_outputs_to_consumers(state(), [task_id()], [grouped_output()]) -> state().
   send_outputs_to_consumers(S, _, []) ->
       S;
   
  
positive.code:         TaskInfo#task_info{spec=Fun(TaskSpec)}, Tasks),
      S#state{tasks = Tasks1}.
  
  add_inputs_to_spec(S, TaskId, NewInputs) ->
      S1 = update_taskspec(S, TaskId,
          fun(TaskSpec) ->
              CurrentInputs = TaskSpec#task_spec.input,
              TaskSpec#task_spec{input = CurrentInputs ++ NewInputs}
          end),
      add_inputs_to_data_map(S1, NewInputs).
  
  
negative.code:     make_stage_tasks(Stage, Grouping, Rest, S2,
                       {TaskNum + 1, [NextTaskId | Acc]}).
  
   -spec add_inputs_to_data_map(state(), [{input_id(), data_input()}]) -> state().
  add_inputs_to_data_map(#state{data_map = OldDataMap} = S, Inputs) ->
      DataMap = lists:foldl(
                  fun({InputId, DataInput}, DM) ->
  