anchor.diff:  
   -type ast()   :: erl_parse:abstract_form().
   
  --type state() :: #{ asts            => [ast()]
  -                  , lexical_renames => clj_scope:scope()
  +-type state() :: #{ asts                => [ast()]
  +                  , lexical_renames     => clj_scope:scope()
  +                  , force_remote_invoke => boolean()
                     }.
   
   -spec emit(clj_env:env()) -> clj_env:env().
  
positive.code: 
  -spec initial_state() -> state().
  initial_state() ->
    #{ asts            => []
     , lexical_renames => clj_scope:new()
     }.
  
  %%------------------------------------------------------------------------------
  
negative.code:   Ast = erl_parse:abstract(NameSym, line_from(NameSym)),
    push_ast(Ast, State);
  %%------------------------------------------------------------------------------
  %% extend_type
  %%------------------------------------------------------------------------------
  ast(#{op := extend_type} = Expr, State) ->
    #{ op    := extend_type
     , type  := #{type := TypeSym}
     , impls := Impls
     } = Expr,
  
    ForceRemote = maps:get(force_remote_invoke, State),
  
    EmitProtocolFun =
      fun(#{type := ProtoSym} = Proto, StateAcc) ->
  