anchor.diff:                     }
                  end,
     {FnNamesExprs, Env1} = lists:foldr(BindingFun, {[], Env}, FnNames),
  -  {FnsExprs, Env2}     = clj_env:last_exprs( length(FnNames)
  -                                           , analyze_forms(FnForms, Env1)
  +  Env2                 = clj_env:push(#{context => expr}, Env1),
  +  {FnsExprs, Env3}     = clj_env:last_exprs( length(FnNames)
  +                                           , analyze_forms(FnForms, Env2)
                                              ),
   
  -  {BodyExpr, Env3} = clj_env:pop_expr(analyze_body(Body, Env2)),
  +  {BodyExpr, Env4} = clj_env:pop_expr(analyze_body(Body, Env3)),
   
     LetFnExpr = #{ op   => letfn
                  , env  => Env
  
positive.code:                , body => BodyExpr
                 },
  
    Env4 = clj_env:remove_locals_scope(Env3),
  
    clj_env:push_expr(LetFnExpr, Env4).
  
  -spec partition_fun_defs([any()]) -> {[any()], [any()]}.
  partition_fun_defs(FnSpecs) ->
  
negative.code: -spec analyze_invoke('clojerl.List':type(), clj_env:env()) -> clj_env:env().
  analyze_invoke(Form, Env) ->
    FSym          = clj_rt:first(Form),
    Env0          = clj_env:push(#{context => expr}, Env),
    {FExpr, Env1} = clj_env:pop_expr(analyze_form(FSym, Env0)),
  
    Args          = clj_rt:to_list(clj_rt:rest(Form)),
    ArgCount      = length(Args),
    {ArgsExpr, Env2} = clj_env:last_exprs(ArgCount, analyze_forms( Args, Env1)),
  
    {FormTagExpr, Env3} = fetch_type_tag(Form, Env2),
    {TagExpr, Env4} = case FExpr of
  