Hi All In experiments converting legacy code to use srfi-9 records, I'm finding the latter doesn't travel well across modules.
See simple code below -- m1.scm runs fine however m2.scm borks when creating srfi-9 record object Any clue why srfi-9 can't be exported? For various reasons I must keep (load "module.scm") mechanism ----m1.scm follows---- (use-modules (srfi srfi-9)) (define-record-type <person> (make-person name age) person? (name person-name set-person-name!) (age person-age set-person-age!)) (define <pet> (make-record-type "pet" '(name age))) (define make-pet (record-constructor <pet>)) (define pet? (record-predicate <pet>)) (define pet-name (record-accessor <pet> 'name)) (define pet-age (record-accessor <pet> 'age)) (define set-pet-name! (record-modifier <pet> 'name)) (define set-pet-age! (record-modifier <pet> 'age)) (export make-person) (export make-pet) (display "pet ") (let ((pet2 (make-pet "milou" 7))) (display (pet-name pet2))) (display ", person ") (let ((person2 (make-person "james" 54))) (display (person-name person2))) (newline) ----m2.scm follows---- (load "m1.scm") (display "in m2:") (newline) (display "pet ") (let ((pet2 (make-pet "milou" 7))) (display (pet-name pet2))) (display ", person ") (let ((person2 (make-person "james" 54))) (display (person-name person2))) (newline) -------------------------------- $guile m1.scm runs successfully pet milou, person james $guile m2.scm first runs m1.scm but fails to recognise the srfi-9 make-person exists: pet milou, person james in m2: pet milou, person Backtrace: 6 (apply-smob/1 #<catch-closure 5599248723e0>) In ice-9/boot-9.scm: 705:2 5 (call-with-prompt _ _ #<procedure default-prompt-handle…>) In ice-9/eval.scm: 619:8 4 (_ #(#(#<directory (guile-user) 559924904140>))) In ice-9/boot-9.scm: 2312:4 3 (save-module-excursion _) 3831:12 2 (_) In /home/chris/sources/caca/m2.scm: 8:15 1 (_) In unknown file: 0 (_ "james" 54) ERROR: Wrong type to apply: #<syntax-transformer make-person>