anchor.diff:  binding(undefined) -> -1;
   binding(_) -> 0.
   
  -%% Child Type Label ------------------------------------------
  -
  -ct([]) -> [];
  -ct(L) when is_list(L) -> '[_]';
  -ct(<<>>) -> <<>>;
  -ct({}) -> {};
  -ct({_A}) -> '{_}';
  -ct({_A,_B}) -> '{_,_}';
  -ct({_A,_B,_C}) -> '{_,_,_}';
  -ct(A) when is_atom(A) -> A;
  -ct(B) when is_binary(B) -> B;
  -ct(X) -> X.
   
   %% SQL Parse Tree Traversal ------------------------------------
   
  
positive.code: 
  -ifdef(logf).
  -define(LOG(F, A), io:format(user, "{~p,~p}:"++F, [?MODULE,?LINE] ++ A)).
  -else.
  -define(LOG(F, A), ok).
  -endif.
  
negative.code: 	Acc3 = fold_return(Ind, Idx , 'fun', Fun, Acc2),
  	fold_return(Ind, Idx , Parent, Fun, Acc3);
  	
  fold_node(Ind, Idx, Parent, {Node, Left, Middle, Right}, _Ch, Fun, Acc0) ->	%% {_,_,_,_} in-order ternary recurse
  	Acc1 = fold_in(Ind+1, 0, Node, Left, undefined, Fun, Acc0),
  	Acc2 = Fun(Ind+1, 0, Parent, {Left, Middle, Right}, Node, Acc1),		
  	Acc3 = fold_in(Ind+1, 0, Node, Middle, undefined, Fun, Acc2),
  	?LOG("~n~p,~p,(~p),~p,~p", [Ind+1, 0, Node, Parent, ct(_Ch)]),
  	Acc4 = Fun(Ind+1, 0, Parent, undefined, 'and', Acc3),		
  	Acc5 = fold_in(Ind+1, 0, Node, Right, undefined, Fun, Acc4),
  	fold_return(Ind, Idx , Parent, Fun, Acc5);
  