anchor.diff:    {Expr1, Env2} = add_type_tag(Symbol, Expr0, Env1),
     clj_env:push_expr(Expr1, Env2).
   
  --spec do_analyze_symbol(boolean(), 'clojerl.Symbol':t(), clj_env:env()) ->
  +-spec do_analyze_symbol(boolean(), 'clojerl.Symbol':type(), clj_env:env()) ->
     {expr(), clj_env:env()}.
   do_analyze_symbol(true = _InPattern, Symbol, Env0) ->
     ?ERROR_WHEN( not is_valid_bind_symbol(Symbol)
  
positive.code:              , clj_env:location(Env0)
               ),
  
    Expr0 = #{ op         => local
             , env        => Env0
             , form       => Symbol
             , tag        => ?NO_TAG
             , name       => Symbol
             , shadow     => clj_env:get_local(Symbol, Env0)
             , underscore => is_underscore(Symbol)
             , id         => erlang:unique_integer()
             },
  
negative.code:                    false -> 'let'
                   end,
  
    {InitExpr, Env1}    = clj_env:pop_expr(analyze_form(Init, Env0)),
    Env2                = clj_env:push(#{is_binding_context => true}, Env1),
    {PatternExpr, Env3} = clj_env:pop_expr(parse_pattern(Pattern, Env2)),
    Env4                = clj_env:pop(Env3),
  
    BindExpr = #{ op      => binding
                , env     => Env0
  