Consider these two modules: --8<---------------cut here---------------start------------->8--- (define-module (a) #:use-module (b) #:export (from-a)) (define from-a 1) --8<---------------cut here---------------end--------------->8--- and: --8<---------------cut here---------------start------------->8--- (define-module (b) #:use-module ((a) #:select (from-a)) #:export (from-b)) (define from-b 2) --8<---------------cut here---------------end--------------->8--- This fails: --8<---------------cut here---------------start------------->8--- scheme@(guile-user)> ,use(a) While executing meta-command: ERROR: no binding `from-a' in module (a) --8<---------------cut here---------------end--------------->8--- whereas this succeeds (starting from a fresh Guile): --8<---------------cut here---------------start------------->8--- scheme@(guile-user)> ,use(b) scheme@(guile-user)> from-b $1 = 2 --8<---------------cut here---------------end--------------->8--- Problem is that ‘define-module*’ processes exports after imports. What about a patch along these lines: