anchor.diff:  %% Gathers the results of pmap.
   %% @end
   %%--------------------------------------------------------------------
  --spec pmap_gather(PIDs :: [pid()], Ref :: reference(), Acc :: list()) -> list().
  +-spec pmap_gather(PIDs :: [pid()], Ref :: reference(), Acc :: list()) ->
  +    list() | error.
   pmap_gather([], _Ref, Acc) -> lists:reverse(Acc);
  -pmap_gather([PID | T], Ref, Acc) ->
  +pmap_gather([PID | T] = Pids, Ref, Acc) ->
       receive
           {PID, Ref, Result} -> pmap_gather(T, Ref, [Result | Acc])
  +    after
  +        ?TIMEOUT ->
  +            IsAnyAlive = lists:foldl(fun
  +                (_, true) ->
  +                    true;
  +                (Pid, _Acc) ->
  +                    erlang:is_process_alive(Pid)
  +            end, false, Pids),
  +            case IsAnyAlive of
  +                true ->
  +                    pmap_gather(Pids, Ref, Acc);
  +                false ->
  +                    error
  +            end
       end.
   
   %%--------------------------------------------------------------------
  
positive.code: %% A parallel version of lists:foreach/2. See {@link lists:foreach/2}
  %% @end
  %%--------------------------------------------------------------------
  -spec pforeach(Fun :: fun((X :: A) -> any()), L :: [A]) -> ok.
  pforeach(Fun, L) ->
      Self = self(),
      Ref = erlang:make_ref(),
      lists:foreach(fun(X) ->
          spawn(fun() -> pforeach_f(Self, Ref, Fun, X) end)
      end, L),
      pforeach_gather(length(L), Ref).
  
  %%--------------------------------------------------------------------
  %% @doc
  
negative.code: %% A  parallel version of lists:map/2. See {@link lists:map/2}
  %% @end
  %%--------------------------------------------------------------------
  -spec pmap(Fun :: fun((X :: A) -> B), L :: [A]) -> [B] | error.
  pmap(Fun, L) ->
      Self = self(),
      Ref = erlang:make_ref(),
  