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.

Reply via email to