anchor.diff:  	case Sz of
   	    #c_var{name=V} ->
   		%% We don't tolerate free variables.
  -		{ok, N} = dict:find(V, Env0),
  -		{Vs0, dict:store(V, N+1, Env0)};
  +		case Env0 of
  +		    #{V:=N} ->
  +			{Vs0, Env0#{V:=N+1}}
  +		end;
   	    _ ->
   		visit_pat(Env0, Sz, Vs0)
   	end,
       visit_pat(Env1, Val, Vs1);
   visit_pat(Env0, #c_alias{pat=P,var=#c_var{name=V}}, Vs) ->
  -    visit_pat(dict:store(V, 0, Env0), P, [V|Vs]);
  +    visit_pat(Env0#{V=>0}, P, [V|Vs]);
   visit_pat(Env, #c_literal{}, Vs) ->
       {Vs, Env}.
   
   restore_vars([V|Vs], Env0, Env1) ->
  -    case dict:find(V, Env0) of
  -	{ok, N} ->
  -	    restore_vars(Vs, Env0, dict:store(V, N, Env1));
  -	error ->
  -	    restore_vars(Vs, Env0, dict:erase(V, Env1))
  +    case Env0 of
  +	#{V:=N} ->
  +	    restore_vars(Vs, Env0, Env1#{V=>N});
  +	_ ->
  +	    restore_vars(Vs, Env0, maps:remove(V, Env1))
       end;
   restore_vars([], _, Env1) ->
       Env1.
  
positive.code:     {Vs, Env}.
  
  visit_pat(Env0, #c_var{name=V}, Vs) ->
      {[V|Vs], dict:store(V, 0, Env0)};
  visit_pat(Env0, #c_tuple{es=Es}, Vs) ->
      visit_pats(Es, Env0, Vs);
  visit_pat(Env0, #c_map{es=Es}, Vs) ->
  
negative.code:     bind_vars(Vs, Env, []).
  
  bind_vars([#c_var{name=X}|Vs], Env0, Xs)->
      bind_vars(Vs, Env0#{X=>0}, [X|Xs]);
  bind_vars([], Env,Xs) ->
      {Xs, Env}.
  
  