anchor.diff:  check_plugins([{plugins, Plugins}], Acc) ->
       check_plugins(Plugins, Acc);
   check_plugins([{module, {Name, Module, Fun, Arity}}|Rest], Acc) ->
  -    case lists:member(Module, erlang:loaded()) of
  -        true ->
  -            check_plugins(Rest, [{module_plugin, [{Name, Module, Fun, Arity}]}
  -                                 | Acc]);
  -        false ->
  -            {error, {not_loaded, Module}}
  +    case catch apply(Module, module_info, [exports]) of
  +        {'EXIT', _} ->
  +            {error, unknown_module};
  +        Exports ->
  +            case lists:member({Fun, Arity}, Exports) of
  +                true ->
  +                    check_plugins(Rest,
  +                                  [{module_plugin,
  +                                    [{Name, Module, Fun, Arity}]} | Acc]);
  +                false ->
  +                    {error, no_matching_fun_in_module}
  +            end
       end;
   check_plugins([{application, App, AppPath}|Rest], Acc) ->
       case check_plugin(App, AppPath) of
  
positive.code:          other_sample_hook_c/1,
           other_sample_hook_d/1,
           other_sample_hook_e/1,
           other_sample_hook_f/1
          ]).
  -endif.
  
  
negative.code:     vmq_plugin_mgr:enable_module_plugin(sample_all_till_ok_hook, ?MODULE, other_sample_hook_d, 1),
      call_hooks(),
  
      io:format(user, "info all ~p~n", [vmq_plugin:info(all)]),
      io:format(user, "info only ~p~n", [vmq_plugin:info(only)]),
      % disable hooks
      vmq_plugin_mgr:disable_module_plugin(?MODULE, sample_hook, 0),
      vmq_plugin_mgr:disable_module_plugin(?MODULE, sample_hook, 1),
  