anchor.diff:               },
         Env1 = clj_env:put_local(Form, Ast, Env),
         clj_env:push_expr(Ast, Env1);
  -    false ->
  +    is_map(Form) ->
  +      Keys = maps:keys(Form),
  +      Vals = maps:values(Form),
  +      {KeysExprs, Env1} = lists:foldl(fun parse_pattern/2, Env, Keys),
  +      {ValsExprs, Env2} = lists:foldl(fun parse_pattern/2, Env1, Vals),
  +      Ast = #{ op   => erl_map
  +             , env  => Env
  +             , form => Form
  +             , tag  => 'clojerl.erlang.Map'
  +             , keys => KeysExprs
  +             , vals => ValsExprs
  +             },
  +      Env3 = clj_env:put_local(Form, Ast, Env2),
  +      clj_env:push_expr(Ast, Env3);
  +    true ->
         analyze_form(Form, Env)
     end.
   
  
positive.code:   MapExpr = #{ op   => erl_map
               , env  => Env4
               , form => Map
               , tag  => 'clojerl.Map'
               , keys => KeysExpr
               , vals => ValsExpr
               },
  
negative.code:                       ),
  
    ParamsList = clj_core:to_list(Params),
    %% clj_utils:error_when( not lists:all(fun is_valid_bind_symbol/1, ParamsList)
    %%                     , [ <<"Params must be valid binding symbols, had: ">>
    %%                       , Params
    %%                       ]
    %%                     , clj_env:location(Env0)
    %%                     ),
  
    IsNotAmpersandFun = fun(X) -> clj_core:str(X) =/= <<"&">> end,
    ParamsNames       = lists:filter(IsNotAmpersandFun, ParamsList),
  