Exposing submodules is becoming more prevalent in Racket, and I think that may be a good thing. The downside is that the syntax for requiring a submodule outside of its defining module is a bit clunky (the use of `submod` is necessary). The same would be true for `lib`, but Racket already has sugar for `lib` in the form of symbolic module paths, which is obviously the most common way to specify modules.
Since the grammar for these paths already constrains the characters they may contain, it would be completely feasible to add a little more sugar to make requiring submodules easier. To make this more concrete, something like (require foo/bar:baz) could be equivalent to (require (submod foo/bar baz)). I, myself, have two main thoughts about this, having already considered it somewhat. 1. I think this would elevate submodules to a more commonly-used feature. Right now, aside from main and test submodules, they rarely pop up, mostly because there’s little need most of the time, and using them is verbose. However, since modules themselves are intrinsically tied to the filesystem, sometimes it’s nice to not need to create a full module. 2. There is a downside to this (aside from the obvious potential downside of cluttering the module path with more syntax): it makes it much easier to expose submodules as part of a public API, but still forces the consumer of a module to be aware of the difference between a module and a submodule. This means that a user needs to remember if a module path is foo/bar or foo:bar, depending on whether or not the author used a submodule, and it also means there is not a seamless path for moving a submodule to a full module or vice-versa. The above caveat is real, but I still think it could be advantageous all the same. Thoughts? Questions? Concerns? Alexis -- You received this message because you are subscribed to the Google Groups "Racket Developers" group. To unsubscribe from this group and stop receiving emails from it, send an email to racket-dev+unsubscr...@googlegroups.com. To post to this group, send email to racket-dev@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/racket-dev/5D260BC4-FA07-4668-919D-92A6B3DC9DB4%40gmail.com. For more options, visit https://groups.google.com/d/optout.