anchor.diff:  %%
   %% @param Provider the provider object
   %% @param State the current state of the system
  --spec do(Provider::t(), rcl_state:t()) -> rcl_state:t().
  +-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
   %%
  
positive.code: -module(rcl_provider).
  
  %% API
  -export([new/2, do/2, format/1]).
  
  -export_type([t/0]).
  
  
negative.code: %%
  %% @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()}}.
  new(ModuleName, State0) when is_atom(ModuleName) ->
      State1 = ModuleName:init(State0),
      case code:which(ModuleName) of
  