anchor.diff:  %%
   %% @param ModuleName The module name.
   %% @param State0 The current state of the system
  --spec new(module(), rcl_state:t()) -> {t(), {ok, rcl_state:t()} | {error, Reason::term()}}.
  +-spec new(module(), rcl_state:t()) ->
  +                 {t(), {ok, rcl_state:t()} | {error, Reason::term()}}.
   new(ModuleName, State0) when is_atom(ModuleName) ->
       State1 = ModuleName:init(State0),
       case code:which(ModuleName) of
  
positive.code: 
  -callback init(rcl_state:t()) -> {ok, rcl_state:t()} | {error, Reason::term()}.
  -callback do(rcl_state:t()) -> {error, Reason::term()} | {ok, rcl_state:t()}.
  -callback format({error, Reason::term()}) -> iolist().
  
  %%%===================================================================
  %%% API
  
negative.code: %%
  %% @param Provider the provider object
  %% @param State the current state of the system
  -spec do(Provider::t(), rcl_state:t()) ->
                  {error, Reason::term()} | {ok, rcl_state:t()}.
  do({?MODULE, Mod}, State) ->
      Mod:do(State).
  
  %% @doc format an error produced from a provider.
  -spec format_error(t(), {error, Reason::term()}) -> iolist().
  format_error({?MODULE, Mod}, Error) ->
      Mod:format_error(Error).
  
  
  %% @doc print the provider module name
  %%
  