Yes! As Ian notes this needs a test case. Some kind Guixer should fix up this patch and send to Guile so that it lands before we release 2.0.12, which should come any day now :-)
Andy On Sun 06 Oct 2013 21:36, l...@gnu.org (Ludovic Courtès) writes: > Consider these two modules: > > (define-module (a) #:use-module (b) #:export (from-a)) > (define from-a 1) > > and: > > (define-module (b) #:use-module ((a) #:select (from-a)) #:export (from-b)) > (define from-b 2) > > This fails: > > scheme@(guile-user)> ,use(a) > While executing meta-command: > ERROR: no binding `from-a' in module (a) > > whereas this succeeds (starting from a fresh Guile): > > scheme@(guile-user)> ,use(b) > scheme@(guile-user)> from-b > $1 = 2 > > Problem is that ‘define-module*’ processes exports after imports. > > What about a patch along these lines: > > diff --git a/module/ice-9/boot-9.scm b/module/ice-9/boot-9.scm > index c825b35..24b8f4c 100644 > --- a/module/ice-9/boot-9.scm > +++ b/module/ice-9/boot-9.scm > @@ -2872,11 +2872,8 @@ VALUE." > (error "expected list of integers for version")) > (set-module-version! module version) > (set-module-version! (module-public-interface module) version))) > - (let ((imports (resolve-imports imports))) > (call-with-deferred-observers > (lambda () > - (if (pair? imports) > - (module-use-interfaces! module imports)) > (if (list-of valid-export? exports) > (if (pair? exports) > (module-export! module exports)) > @@ -2885,6 +2882,9 @@ VALUE." > (if (pair? replacements) > (module-replace! module replacements)) > (error "expected replacements to be a list of symbols or symbol > pairs")) > + (let ((imports (resolve-imports module))) > + (if (pair? imports) > + (module-use-interfaces! module imports))) > (if (list-of valid-export? re-exports) > (if (pair? re-exports) > (module-re-export! module re-exports)) > @@ -2896,7 +2896,7 @@ VALUE." > ;; handlers. > (if (pair? duplicates) > (let ((handlers (lookup-duplicates-handlers duplicates))) > - (set-module-duplicates-handlers! module handlers)))))) > + (set-module-duplicates-handlers! module handlers))))) > > (if transformer > (if (and (pair? transformer) (list-of symbol? transformer)) > > Thanks, > Ludo’.