You can't re-define identifiers that are imported. That is, when you do re-define them, they are changed in the original identifier's namespace instead of the current one. Is this suppose to happen?
Yes, and that's the reason for chjmodule doing copying instead of aliasing identifiers from the source packages directly.
The way I do it right now is to expand all defines into something like
(begin (namespace "foo#" bar) (define bar ...))
to ensure that no external symbol is overwritten by define. (This gives slightly different semantics to chjmodule's approach though. Don't know if it's good or not) This might be okay for module systems, but if I were to manually use the namespacing mechanism it would be a source of odd bugs, when an already taken and imported name is used.
Even though this is clearly obvious when you take the definition of ##namespace into consideration, this is definitely one aspect of it that makes me thinks it's odd to work with in practise.
Just like ##namespace vs. namespace, it is very well-defined, but the definition doesn't match the behavior I expect intuitively.
/Per