anchor.diff:        InvokeExpr = #{ op   => invoke
                       , env  => Env
                       , form => Form
  +                    , tag  => TagExpr
                       , f    => ErlFunExpr
                       , args => ArgsExprs
                       },
   
  -      clj_env:push_expr(InvokeExpr, Env2);
  +      clj_env:push_expr(InvokeExpr, Env3);
       _ ->
         Module          = type_tag(TargetExpr),
         Function        = clj_rt:keyword(NameSym),
  
positive.code:       InvokeExpr      = #{ op   => invoke
                           , env  => Env
                           , form => Form
                           , f    => FunExpr
                           , args => [TargetExpr | ArgsExprs]
                           },
  
        clj_env:push_expr(InvokeExpr, Env2)
    end.
  
  -spec maybe_type_tag('clojerl.Symbol':type(), clj_env:env()) ->
    {any(), clj_env:env()}.
  maybe_type_tag(Symbol, Env) ->
    Meta = clj_rt:meta(Symbol),
    case clj_rt:get(Meta, tag) of
      ?NIL -> {?NO_TAG, Env};
      Tag  -> maybe_resolve_type_tag(Tag, Env)
    end.
  
  -spec maybe_resolve_type_tag(any(), clj_env:env()) ->
  
negative.code:   {ArgsExprs, Env2} = clj_env:last_exprs( length(ArgsList)
                                          , analyze_forms(ArgsList, Env1)
                                          ),
    {TagExpr, Env3}   = maybe_type_tag(Form, Env2),
  
    case TargetExpr of
      #{ op   := type
  