anchor.diff:  
   
   -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().
  +    is_subtype(FunName, min_cycles_per_round | max_cycles_per_round | trigger_interval),
  +    is_subtype(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()}.
  +    is_subtype(FunName, init | min_cycles_per_round | max_cycles_per_round | trigger_interval),
  +    is_subtype(Args, list()),
  +    is_subtype(CBModule, cb_module()),
  +    is_subtype(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()}).
  +    is_subtype(FunName, cb_fun_name()),
  +    is_subtype(Arguments, list()),
  +    is_subtype(Msg, message()),
  +    is_subtype(CBModule, cb_module()),
  +    is_subtype(State, state()),
  +    is_subtype(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),
  
positive.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
                            Neighbors :: nodelist:neighborhood(),
                            Reason :: rm_loop:reason().
  rm_filter_slide_msg(_OldNeighbors, _NewNeighbors, Reason) ->
          Reason =:= {slide_finished, pred} orelse Reason =:= {slide_finished, succ}.
  
  
negative.code: 
  -spec tester_create_state(Status, Range, Interval,
      CBState, CBStatus, ExchData, Round, TriggerLock, Cycles) -> state()
      when    is_subtype(Status, init | uninit),
              is_subtype(Range, intervals:interval()),
              is_subtype(Interval, pos_integer()),
              is_subtype(CBState, any()),
              is_subtype(CBStatus, unstarted | started | tombstone),
              is_subtype(ExchData, any()),
              is_subtype(Round, non_neg_integer()),
              is_subtype(TriggerLock, free | locked),
              is_subtype(Cycles, non_neg_integer()).
  tester_create_state(Status, Range, Interval, CBState, CBStatus,
          ExchData, Round, TriggerLock, Cycles) ->
      State = ?PDB:new(state, ?PDB_OPTIONS),
  