anchor.diff:      [Fn(X, Y) | zipwith(Fn, Xs, Ys)];
   
   zipwith(Fn, _, _) when is_function(Fn, 2) -> [].
  +
  +%% @doc Same as lists:map, but the function is applied to the index of
  +%%      the element as first argument (counting from 1), and the element
  +%%      itself as second argument.
  +%%
  +mapi(F, List) ->
  +    mapi(F, List, 1).
  +
  +mapi(F, [H | T], Current) ->
  +    [F(Current, H) | mapi(F, T, Current + 1)];
  +
  +mapi(F, [], _Current) when is_function(F, 2) -> [].
   
   %% @doc Thread a value through a list of functions.
   %%
  
positive.code: %% @doc Get the process arguments of the given optimized map inner dict.
  %%
  
  -spec unpack_opt_inner_dict(dict:dict(lasp_vertex(),
                                        {lasp_vertex(),
                                         #process_metadata{}})) -> list(process_args()).
  unpack_opt_inner_dict(OptInnerMap) ->
      dict:fold(fun(Parent, {Child, Metadata}, Acc) ->
          ReadFun = Metadata#process_metadata.read,
          Read = {Parent, ReadFun},
  
          Transform = Metadata#process_metadata.transform,
  
          WriteFun = Metadata#process_metadata.write,
          Write = {Child, WriteFun},
  
          ProcessArgs = {[Read], Transform, Write},
          [ProcessArgs | Acc]
      end, [], OptInnerMap).
  
  %% @doc Given a path contraction candidate in the graph, return the process
  %%      metadata from all intermediate edges.
  %%
  %%      Used to build the optimized map.
  %%
  -spec get_metadata(digraph:graph(),
                     contract_path()) -> list({lasp_vertex(),
                                               {lasp_vertex(), #process_metadata{}}}).
  
  get_metadata(G, [_ | Tail]=VSeq) ->
      zipwith(fun(Src, Dst) ->
          {Src, {Dst, lists:nth(1, get_metadata(G, Src, Dst))}}
      end, VSeq, Tail).
  
  %% @doc Get the process metadata for all edges between the given vertices.
  
negative.code:         end, OldPids)
      end),
  
      dict:store(Pid, {VSeq, Metadata}, OptMap).
  
  %% @doc If the given vertex was part of a contracted path, cleave it
  %%
  