When organizing code, is there a rule of thumb for when to use a subcollection and when to use a submodule?
My personal rule of thumb is: if you expect the code to be small, a submodule can be good enough (say, just to re-export things, or just wrap some things, or a small main). If it grows too much, then separate it into a different file.
I don’t have a mnemonic but here is how I remember them (module X L ...)
is a standalone module, cannot require enclosing module (module+ X ...)
combines (or adds) all of the same named submodules into a (module* X #f ...)
(module* X L ...)
is a module
but it can require the enclosing module
Multiple additions (module+
) is a multiplication (module*
) is the best sort of mnemonic I have…
Generally I lean towards subcollections by default. Submodules I use for things that obviously can’t be subcollections, such as test
(tests in the same file are incredibly useful) and main
submodules, or a private
submodule that re-exports something I need to use in another part of my package but which I don’t want to be part of my package’s public API.