anchor.diff:      Members = [P || #{name := P} <- Membership],
       {reply, {ok, Members}, State};
   
  +handle_call({member, Node}, _From, #state{membership=Membership}=State) ->
  +    IsMember = lists:any(fun(#{name := Name}) -> Name =:= Node end, Membership),
  +    {reply, IsMember, State};
  +
   handle_call(connections, _From, #state{connections=Connections}=State) ->
       {reply, {ok, Connections}, State};
   
  
positive.code: -spec start_link() -> {ok, pid()} | ignore | {error, term()}.
  start_link() ->
      gen_server:start_link({local, ?MODULE}, ?MODULE, [], []).
  
  %% @doc Return membership list.
  members() ->
  
negative.code: %% @private
  up(#{name := Name}, State) ->
      up(Name, State);
  up(Name, #state{up_functions = UpFunctions} = State) ->
      %% Notify functions matching the wildcard 'any'
      ok = up(any, State),
  
      case dict:find(Name, UpFunctions) of
          error ->
              ok;
          {ok, Functions} ->
              [
                  begin
                      case erlang:fun_info(F, arity) of
                          {arity, 0} -> F();
                          {arity, 1} -> F(Name)
                      end
                  end || F <- Functions
              ],
              ok
      end.
  
  %% @private
  down(#{name := Name}, State) ->
      down(Name, State);
  down(Name, #state{down_functions = DownFunctions} = State) ->
      %% Notify functions matching the wildcard 'any'
      ok = down(any, State),
  
      case dict:find(Name, DownFunctions) of
          error ->
              ok;
          {ok, Functions} ->
              [
                  begin
                      case erlang:fun_info(F, arity) of
                          {arity, 0} -> F();
                          {arity, 1} -> F(Name)
                      end
                  end || F <- Functions
              ],
              ok
      end.
  
  