anchor.diff:          end, fun({_, _, _, V}) ->  V  end)
       end,
   
  +    %% Since creating a new process involves calling ourselves,
  +    %% we must start it in another process and handle the result
  +    %% asynchronously.
       Self = self(),
       spawn_link(fun() ->
           {ok, Pid} = lasp_process:start_dag_link([[Read], TransFun, Write]),
  
positive.code: handle_call({add_edges, Src, Dst, Pid, ReadFuns, TransFun, {Dst, WriteFun}},
              _From, #state{dag=Dag, process_map=Pm, contraction_step=CtStep}=State) ->
  
      %% @todo Should perform contractions at CONTRACTION_INTERVAL
      %%       and check for cleaving every time an edge is added.
      %%
      %%       First, check if this edge involves a contracted vertex
      %%       if it does, perform a cleaving step on it.
  
      %% @todo Cleaving step
      %%       Check if any of the given vertices has been optimized in
      %%       in the past.
  
      %% Add vertices only if they are either sources or sinks. (See add_if)
      %% All user-defined variables are tracked through the `declare` function.
      lists:foreach(fun(V) -> add_if_pid(Dag, V) end, Src),
      add_if_pid(Dag, Dst),
  
      %% For all V in Src, make edge (V, Dst) with label {Pid, Read, Trans, Write}
      %% (where {Id, Read} = ReadFuns s.t. Id = V)
  
negative.code:          terminate/2,
           code_change/3]).
  
  %% Defines how often an optimization pass happens.
  %% A value of 0 means the optimization happens every time.
  -define(CONTRACTION_INTERVAL, 0).
  