Hi Sam! I wasn't familiar with racket/load and it seems neat.
But it either seems too hopeless, or not hopeless enough:
Since all forms within a racket/load module are evaluated in the top
level, bindings cannot be exported from the module using provide.
This seems like a bit too much unfortunately. If I were to be writing
for instance a web application or a game or what have you, I'd still
want the dynamism of being able to redefine things, but I'd also want to
be able to export things from a module.
Maybe here's a properly hopeless level of indirection? What if we had
something like a lambda-box that for toplevel definitions of functions
instead wrapped the function in a box. It can still be invoked, but if
redefined, the contents of the box could be swapped out with a new
function? That's not too far off from how Guile's redefining works
presently, if I understand right. Redefining a toplevel non-function
could just set! the variable.
I guess maybe you couldn't provide more than what you've already
provided from the module. But that's probably okay?