Using a library’s API should not, in general, entail usage of the API of its requires as is the case now (i.e. we should not -I the library directories of requires); if you don’t understand why see here. -H solves this problem.
Now consider the usage section of my proposal and try to solve the cases I mention with -H. You can’t.
You need a way for libraries to indicate which of their dependencies they consider as abstract (requires, -H) and those they don’t (represents, -I). Changes to requires should not break users of libraries while changes to represents do.
We can certainly do without but this entails that:
- We can’t deprecate library names without breaking users.
- We can’t have library names like
my-currated-set-of-libsthat stand for using the API of a bunch of other libraries.