anchor.diff:  in_edges(V) ->
       gen_server:call(?MODULE, {in_edges, V}, infinity).
   
  +process_map() ->
  +    gen_server:call(?MODULE, get_process_map, infinity).
  +
   %%%===================================================================
   %%% gen_server callbacks
   %%%===================================================================
   
   %% @doc Initialize state.
   init([]) ->
  -    {ok, #state{dag=digraph:new([acyclic])}}.
  -
  -%% @private
  +    {ok, #state{dag=digraph:new([acyclic]),
  +                process_map=dict:new()}}.
  +
   -spec handle_call(term(), {pid(), term()}, #state{}) ->
       {reply, term(), #state{}}.
   
  
positive.code:     R = file:write_file(Path, to_dot(Dag)),
      {reply, R, State};
  
  %% @doc Check if linking the given vertices will introduce a cycle in the graph.
  %%
  %%      Naive approach first: see if To is a member of From
  %%
  %%      Second approach: let the digraph module figure it out,
  %%      as digraph:add_edge/3 will return {error, {bad_edge, _}}.
  
negative.code: %%% Type definitions
  %%%===================================================================
  
  %% We store a mapping Pid -> [{parent_node, child_node}] to
  %% find the edge labeled with it without traversing the graph.
  %%
  %% This is useful when the Pid of a lasp process changes
  %% (because it gets restarted or it just terminates), as it
  %% lets us quickly delete those edges.
  -type process_map() :: dict:dict(pid(), {id(), id()}).
  
  -record(state, {dag :: digraph:graph(),
                  process_map :: process_map()}).
  
  %% Return type of digraph:edge/2
  -type edge() :: {digraph:edge(),
                   digraph:vertex(),
                   digraph:vertex(),
                   term()}.
  
  %%%===================================================================
  %%% API
  