anchor.diff:  %% receive message from pipe (match-only pipe protocol)
   %%  Options
   %%    noexit - opts returns {error, timeout} instead of exit signal
  --spec(recv/0 :: () -> _).
  --spec(recv/1 :: (timeout()) -> _).
  --spec(recv/2 :: (timeout(), [atom()]) -> _).
  --spec(recv/3 :: (pid(), timeout(), [atom()]) -> _).
  +-spec recv() -> _.
  +-spec recv(timeout()) -> _.
  +-spec recv(timeout(), [atom()]) -> _.
  +-spec recv(pid(), timeout(), [atom()]) -> _.
   
   recv() ->
      recv(5000).
  
positive.code: 
  %%
  %% extract transaction pid
  -spec(pid/1 :: (pipe()) -> pid() | undefined).
  
  pid(Pipe) ->
     pipe:a(Pipe).
  
  %%
  %% extract transaction reference
  -spec(tx/1 :: (pipe()) -> reference() | undefined).
  
  tx({pipe, {_Pid, Tx}, _})
   when is_reference(Tx) ->
  
negative.code:  
  %%
  %% release process monitor
  -spec demonitor(monitor()) -> ok.
  
  demonitor({process, Ref, _Pid}) ->
     erlang:demonitor(Ref, [flush]);
  