anchor.diff:  format_error({invalid_nested_and_or_in_guard, {Parent, Id, Left}}) ->
     io_lib:format("invalid nested and/or in guard, parent: ~p, current: ~p, args: ~p", [Parent, Id, Left]);
   format_error({not_enough_operand_in_guard, {Op, Operand}}) ->
  -  io_lib:format("not enough operand for ~p, given: ~p", [Op, Operand]).
  -
  +  io_lib:format("not enough operand for ~p, given: ~p", [Op, Operand]);
  +format_error({invalid_fn_expression, {Expr}}) ->
  +  io_lib:format("invalid fn expression ~p", [Expr]);
  +format_error({fn_clause_arity_mismatch, {Arity, Last}}) ->
  +  io_lib:format("fn clause arity ~B mismatch with last clause arity ~B~n", [Arity, Last]).
  +
  +
  
positive.code:   {{'case', ?line(Meta), TExpr, [TClause | TLeft]}, TEnv2};
  
  %% fn
  translate({list, Meta, [{identifier, _, 'fn'}, {C, _, _} = Args | Body]}, Env) when ?is_list(C) ->
    translate_fn(Meta, Args, Body, Env);
  
  %% Erlang specified forms
  
  
negative.code:   translate_attribute(Meta, Attribute, Value, Env);
  
  %% Local call
  translate({list, Meta, [{identifier, _, Id} = Name| Args]}, #{scope := Scope} = Env) ->
    Arity = length(Args),
    FunArity = {Id, Arity},
    Vars = maps:get(vars, Scope),
    case orddict:find(Id, Vars) of
      {ok, _Var} ->
        %% local variable
        translate_local_call(Meta, Name, Args, Env);
      error ->
        case kapok_dispatch:find_local(FunArity, Env) of
          {F, A, P} ->
  