anchor.diff:  
   -type metadata() :: #{method() => map()}.
   
  --spec single_host_compile([cowboy_router:route_path()]) ->
  +
  +
  +-spec single_host_compile([route_path()]) ->
     cowboy_router:dispatch_rules().
   single_host_compile(Trails) ->
     compile([{'_', Trails}]).
   
  --spec compile([{Host::cowboy_router:route_match(), Trails::trails()}]) ->
  +-spec compile([{Host::route_match(), Trails::trails()}]) ->
     cowboy_router:dispatch_rules().
   compile([]) -> [];
   compile(Routes) ->
     cowboy_router:compile(
       [{Host, to_route_paths(Trails)} || {Host, Trails} <- Routes]).
   
  -  -spec to_route_paths(trail()) -> cowboy_router:route_path().
  +  -spec to_route_paths(trail() ) -> cowboy_router:routes().
   to_route_paths(Paths) ->
     [to_route_path(Path)|| Path <- Paths].
   
  --spec to_route_path(trail()) -> cowboy_router:route_path().
  +-spec to_route_path(trail()) -> cowboy_router:route_rule().
   to_route_path(Trail) when is_map(Trail) ->
     PathMatch = maps:get(path_match, Trail),
     ModuleHandler = maps:get(handler, Trail),
  
positive.code: -export([metadata/1]).
  -export([constraints/1]).
  
  -opaque trail() ::
    #{ path_match  => cowboy_router:route_match()
     , constraints => cowboy_router:constraints()
  
negative.code:    }.
  -export_type([trail/0]).
  
  %% exported from cowboy_router.erl
  -type route_match() :: '_' | iodata().
  -type route_path() :: {Path::route_match(), Handler::module(), Opts::any()}
    | {Path::route_match(), cowboy_router:constraints(), Handler::module(), Opts::any()}.
  %%
  
  -type trails() :: [ trails:trail() | route_path() ].
  -export_type([trails/0]).
  
  -type method() :: get | put | post | delete | patch | head | options.
  