+(defun call-with-module-environment (thunk &optional (module *module*))
+ "Invoke THUNK with bindings for the module variables in scope.
+
+ This is the guts of `with-module-environment', which you should probably
+ use instead."
+ (progv
+ (mapcar #'car *module-bindings-alist*)
+ (module-variables module)
+ (unwind-protect (funcall thunk)
+ (setf (module-variables module)
+ (mapcar (compose #'car #'symbol-value)
+ *module-bindings-alist*)))))
+