anchor.diff:    {ArgsExprs, Env2} = clj_env:last_exprs( length(ArgsList)
                                           , analyze_forms(ArgsList, Env1)
                                           ),
  +  {TagExpr, Env3}   = maybe_type_tag(Form, Env2),
   
     case TargetExpr of
       #{ op   := type
  
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:               , init    => InitExpr
                , form    => Pattern
                , local   => OpAtom
                , tag     => maps:get(tag, PatternExpr, ?NO_TAG)
                },
  
    LocalExprs = clj_env:get(pattern_locals, [], Env2),
  