anchor.diff:    {pass, []};
   
   %% Expected text
  +validate_primitive(Key, E, A, Callbacks) when is_binary(E) ->
  +  validate_primitive(Key, from_utf8(E), A, Callbacks);
   validate_primitive(Key, E, A, Callbacks) when is_binary(A) ->
     validate_primitive(Key, E, from_utf8(A), Callbacks);
  -validate_primitive(Key, E, A, Callbacks) when is_binary(E) ->
  -  validate_primitive(Key, from_utf8(E), A, Callbacks);
   validate_primitive(Key, E, A, Callbacks) when is_list(E) andalso is_list(A) ->
     TextDiffFun = proplists:get_value( text_diff
                                      , Callbacks
  
positive.code:                       , [global]
                        ),
        RE = ["^", RE4, "$"],
        case re:run(A, RE, [global, {capture, all_but_first, AStringType}]) of
          nomatch ->
            {not_equal, {Key, E, A, TextDiffFun(E, A)}};
          {match, [Values]} ->
  
negative.code:     ++ "|"
      ++ ?MATCH_ANY
      ++ ")",
    case re:run(E, RE_HAS_PARAMS, [global, {capture, all_but_first, list}]) of
      nomatch ->
        {not_equal, {Key, E, A, TextDiffFun(E, A)}};
      {match, [[?MATCH_ANY]]} ->
        {pass, []};
      {match, [[E]]} ->
        {pass, [{store_tag2param(E), A}]};
      {match, Params0} ->
        Params = lists:map( fun([?MATCH_ANY]) ->
                                ?MATCH_ANY;
                               ([Match]) ->
  