I've found reexport useful for a different scenario.
We have some code that effectively does polymorphism.
We have base code in module foo.
We create module bar, which largely does the same as foo, but changes a few things, by using
reexport/2 in module bar, and similarly with baz.
We can now import either bar or baz into mep and get a change in behavior, and in fact the selection of which happens based on a command line option.
I've also done this:
At The Elgin Works we have a bunch of small business units. As an incubator, we're always trying things.
Each of these has it's own product knowledgebase, with part, sku's , etc.
Often we don't care about the business unit, and wish to treat all of these as, effectively, multifile predicates. We have a bit of code that defines master predicates that 'farm out' to the business units. This code is in a 'elginworks' module, and is generated at load time by a declarative. Ultimately the business unit list comes from a setting.
So we should be careful about making too many assumptions about how modules are used.