Why are crates allowed to make inaccessible the types of values its functions give you?
For example, hyper uses service_fn in its Getting Started. That function returns ServiceFn, which is public, but the path to that struct is not.
You can use the value and assign it to a variable, but you can't name the type of that variable.
Not allowing the user to use its constructor makes sense but not allowing them to name its type prevents (without major workarounds afaik) trivial things like returning it from a function. I don't understand why this is possible.