anchor.diff:  %% @doc Add an observer to an event
   handle_cast({'observe', Event, Observer, Priority}, State) ->
       Event1 = case is_tuple(Event) of true -> element(1,Event); false -> Event end,
  -
       PObs = {Priority, Observer},
       UpdatedObservers = case ets:lookup(State#state.observers, Event1) of 
           [] -> 
  
positive.code:     try
          M:F(Pid, Msg, Acc, Context)
      catch EM:E ->
          ?ERROR("Error notifying %p with event %p. Detaching pid.", [{M,F,Pid}, Msg]),
          detach(msg_event(Msg), {M,F,[Pid]}, Context),
          {error, {notify_observer, Pid, Msg, EM, E}}
      end;
  
negative.code:     catch EM:E ->
          case z_utils:is_process_alive(Pid) of
              false ->
                  ?ERROR("Error notifying ~p with event ~p. Detaching pid.", [{M,F,Pid}, Msg]),
                  detach(msg_event(Msg), {M,F,[Pid]}, Context);
              true ->
                  % Assume transient error
                  nop
  