anchor.diff:  %%      Used to subscribe to the ring maintenance for {slide_finished, succ} or
   %%      {slide_finished, pred} msg.
   -spec rm_send_activation_msg(Subscriber, ?MODULE, Neighbours, Neighbours) -> ok when
  -                             Subscriber :: pid(),
  -                             Neighbours::nodelist:neighborhood().
  +                             is_subtype(Subscriber, pid()),
  +                             is_subtype(Neighbours, nodelist:neighborhood()).
   rm_send_activation_msg(_Pid, ?MODULE, _OldNeighbours, NewNeighbours) ->
       %% io:format("Pid: ~w. Self: ~w. PidGossip: ~w~n", [Pid, self(), Pid2]),
       MyRange = nodelist:node_range(NewNeighbours),
  
positive.code: 
  
  -spec cb_call(FunName, CBModule) -> non_neg_integer() | pos_integer() when
      FunName :: min_cycles_per_round | max_cycles_per_round | trigger_interval,
      CBModule :: cb_module().
  cb_call(FunName, CBModule) ->
      cb_call(FunName, [], CBModule).
  
  -spec cb_call(FunName, Args, CBModule) -> Return when
      FunName :: init | min_cycles_per_round | max_cycles_per_round | trigger_interval,
      Args :: list(),
      CBModule :: cb_module(),
      Return :: non_neg_integer() | pos_integer() | {ok, any()}.
  cb_call(FunName, Args, CBModule) ->
      {CBModuleName, _Id} = CBModule,
      apply(CBModuleName, FunName, Args).
  
  
  -spec cb_call(FunName, Arguments, Msg, CBModule, State) -> Return when
      FunName :: cb_fun_name(),
      Arguments :: list(),
      Msg :: message(),
      CBModule :: cb_module(),
      State :: state(),
      Return :: ok | discard_msg
          | send_back | boolean() | {any(), any(), any()} | list({list(), list()}).
  cb_call(FunName, Args, Msg, CBModule, State) ->
      {ModuleName, _InstanceId} = CBModule,
      CBState = state_get(cb_state, CBModule, State),
  
negative.code: %% @doc Checks whether the received notification is a {slide_finished, succ} or
  %%      {slide_finished, pred} msg. Used as filter function for the ring maintanance.
  -spec rm_filter_slide_msg(Neighbors, Neighbors, Reason) -> boolean() when
                            is_subtype(Neighbors, nodelist:neighborhood()),
                            is_subtype(Reason, rm_loop:reason()).
  rm_filter_slide_msg(_OldNeighbors, _NewNeighbors, Reason) ->
          Reason =:= {slide_finished, pred} orelse Reason =:= {slide_finished, succ}.
  
  