anchor.diff:  	end} || {H, P, R} <- Tests].
   
   match_constraints_test() ->
  -	Dispatch = [{'_', [],
  +	Dispatch0 = [{'_', [],
   		[{[<<"path">>, value], [{value, int}], match, []}]}],
  -	{ok, _, [], #{value := 123}, _, _} = match(Dispatch,
  +	{ok, _, [], #{value := 123}, _, _} = match(Dispatch0,
   		<<"ninenines.eu">>, <<"/path/123">>),
  -	{ok, _, [], #{value := 123}, _, _} = match(Dispatch,
  +	{ok, _, [], #{value := 123}, _, _} = match(Dispatch0,
   		<<"ninenines.eu">>, <<"/path/123/">>),
  -	{error, notfound, path} = match(Dispatch,
  +	{error, notfound, path} = match(Dispatch0,
   		<<"ninenines.eu">>, <<"/path/NaN/">>),
  +	Dispatch1 = [{'_', [],
  +		[{[<<"path">>, value, <<"more">>], [{value, nonempty}], match, []}]}],
  +	{ok, _, [], #{value := <<"something">>}, _, _} = match(Dispatch1,
  +		<<"ninenines.eu">>, <<"/path/something/more">>),
  +	{error, notfound, path} = match(Dispatch1,
  +		<<"ninenines.eu">>, <<"/path//more">>),
   	Dispatch2 = [{'_', [], [{[<<"path">>, username],
   		[{username, fun(_, Value) ->
   			case cowboy_bstr:to_lower(Value) of
  
positive.code: 		{<<"erlang.fr">>, '_',
  			{ok, match_erlang_ext, [], #{ext => <<"fr">>}}},
  		{<<"any">>, <<"/users/444/friends">>,
  			{ok, match_users_friends, [], #{id => <<"444">>}}}
  	],
  	[{lists:flatten(io_lib:format("~p, ~p", [H, P])), fun() ->
  		{ok, Handler, Opts, Binds, undefined, undefined}
  
negative.code: %% unless V was already defined and E isn't identical to the previous value.
  list_match([E|Tail], [V|TailMatch], Binds) when is_atom(V) ->
  	case Binds of
  		%% @todo This isn't right, the constraint must be applied FIRST
  		%% otherwise we can't check for example ints in both host/path.
  		#{V := E} ->
  			list_match(Tail, TailMatch, Binds);
  		#{V := _} ->
  