anchor.diff:  %%
   -spec product(id(), id(), id(), store()) -> ok.
   product(Left, Right, Product, Store) ->
  -    BindFun = fun(_AccId, AccValue, _Variables) ->
  -            ?MODULE:bind(_AccId, AccValue, _Variables)
  -    end,
       ReadLeftFun = fun(_Left, _Threshold, _Variables) ->
               ?MODULE:read(_Left, _Threshold, _Variables)
       end,
       ReadRightFun = fun(_Right, _Threshold, _Variables) ->
               ?MODULE:read(_Right, _Threshold, _Variables)
       end,
  -    product(Left, Right, Product, Store, BindFun, ReadLeftFun,
  +    product(Left, Right, Product, Store, ?BIND, ReadLeftFun,
               ReadRightFun).
   
   %% @doc Perform a read for a particular identifier.
  
positive.code: %%
  -spec intersection(id(), id(), id(), store()) -> ok.
  intersection(Left, Right, Intersection, Store) ->
      BindFun = fun(_AccId, AccValue, _Variables) ->
              ?MODULE:bind(_AccId, AccValue, _Variables)
      end,
      ReadLeftFun = fun(_Left, _Threshold, _Variables) ->
              ?MODULE:read(_Left, _Threshold, _Variables)
      end,
      ReadRightFun = fun(_Right, _Threshold, _Variables) ->
              ?MODULE:read(_Right, _Threshold, _Variables)
      end,
      intersection(Left, Right, Intersection, Store, BindFun, ReadLeftFun, ReadRightFun).
  
  %% @doc Compute the union of two sets.
  %%
  
negative.code: %%
  -spec map(id(), function(), id(), store()) -> ok.
  map(Id, Function, AccId, Store) ->
      map(Id, Function, AccId, Store, ?BIND, ?READ).
  
  %% @doc Compute the intersection of two sets.
  %%
  