anchor.diff:  getOperator(filter, {Field, 'unilike', Value}) ->
           Regexp = buildRegexFun(Value, true, [caseless]),
           buildFilterFun(Regexp, Field);
  -getOperator(truncate, Depth) when is_integer(Depth) ->
  -        fun(Tree) -> truncate(Tree, Depth) end;
   getOperator(_, _) -> fun(Tree) -> Tree end.
   
   buildOpList(Token, [Op | Rest], OpsMap, Seq, List) ->
  
positive.code:         makeTree(Index, Rev, fun mergeStore/2).
  
  delete(Index, Rev) when is_map(Rev) ->
          RevTree = makeTree(Index, Rev, fun demergeTrees/2),
          {ok, FullTree} = plywood_db:fetch(primary_tree, Index),
          plywood_db:store(primary_tree, Index, demergeTrees(FullTree, RevTree)).
  
  deleteByValue(_Index, _Value) -> ok.
  
  processOps() -> [aggregate, filter, truncate].
  
  processTree(Tree, Opts) when is_map(Opts) ->
          OpList = buildOpList(undefined, [], Opts, processOps(), []),
  
negative.code:         end,
          plywood_db:store(primary_tree, Key, NewNode).
  
  deMergeStore(Index, #{id := Id} = Data) ->
          Key = {Index, Id},
          case plywood_db:getIfExists(primary_tree, Key) of
                  false -> ok;
                  {ok, OldNode} ->
  			case deMergeNodes(OldNode, Data) of
  				noop -> ok;
  				NewNode -> plywood_db:store(primary_tree, Key, NewNode)
  			end
          end.
  
  mergeNodes(Left, []) -> Left;
  mergeNodes(Left, [{id,   _} |Right]) -> mergeNodes(Left, Right);
  mergeNodes(Left, [{name, _} |Right]) -> mergeNodes(Left, Right);
  