anchor.diff: +%% @doc Clojure multimethod.
  +%%
  +%% Implements the creation and update of a multimethod's dispatch map.
  +%% The dispatch map is kept in its own BEAM module so that it can be
  +%% updated at runtime independently. This eliminates the risk of
  +%% killing processes that might be currently using the module where
  +%% the dispatch map is kept.
  +%%
  +%% There is some name mangling when generating the name of the module
  +%% for the dispatch map to avoid using invalid filename characters.
  +%%
  +%% The code in this module should only be used by the multimethod
  +%% related functions in the `clojure.core' namespace.
   -module(clj_multimethod).
   
   -include("clojerl.hrl").
  
positive.code: %% API
  %%------------------------------------------------------------------------------
  
  -spec init('clojerl.Symbol':type()) -> ?NIL.
  init(MultiFnSym) ->
    DispatchMapVar = dispatch_map_var(MultiFnSym),
  
negative.code:     X -> X
    end.
  
  %% @private
  -spec get_method_table('clojerl.Var':type()) -> any().
  get_method_table(MultiFnVar) ->
    dispatch_map(MultiFnVar).
  
  %% @private
  -spec add_method('clojerl.Var':type(), any(), any()) -> 'clojerl.Var':type().
  add_method(MultiFnVar, DispatchValue, Method0) ->
    Assoc  = fun clj_rt:assoc/3,
  