I agree, it seems like a bug. Here is a slightly more minimal example:
``` $ cat rectangular.scm (library (rectangular) (export real-part) (import (guile)) (define real-part car)) $ cat solution.scm (use-modules ((rectangular) #:prefix rect:)) (display (rect:real-part '(1 . 2))) $ guile3.0 --fresh-auto-compile -L . solution.scm [...] ERROR: In procedure real-part: In procedure real-part: Wrong type argument in position 1: (1 . 2) ``` On the other hand, this doesn't happen if you replace rectangular.scm with ``` (define-module (rectangular) #:export (real-part)) (define real-part car) ``` I think the implementation of the R6RS library form is to blame here: look at this. ``` scheme@(guile-user)> ,expand (library (rectangular) (export real-part) (import (guile)) (define real-part car)) $1 = (begin (let ((m ((@@ (guile) define-module*) '(rectangular) #:filename #f #:pure #t #:version '() #:declarative? #t))) ((@@ (guile) set-current-module) m) m) (let ((iface ((@@ (guile) resolve-r6rs-interface) '(guile)))) ((@@ (guile) call-with-deferred-observers) (lambda () ((@@ (guile) module-use-interfaces!) ((@@ (guile) current-module)) ((@@ (guile) list) iface))))) (if #f #f) ((@@ (guile) call-with-deferred-observers) (lambda () ((@@ (guile) module-export!) ((@@ (guile) current-module)) '()))) ((@@ (guile) call-with-deferred-observers) (lambda () ((@@ (guile) module-re-export!) ((@@ (guile) current-module)) '(real-part)))) ((@@ (guile) call-with-deferred-observers) (lambda () ((@@ (guile) module-replace!) ((@@ (guile) current-module)) '()))) (define real-part car)) ``` As you can see, the library macro has turned the (export real-part) part into a re-export from (guile).
signature.asc
Description: This is a digitally signed message part