() Joel James Adamson <[email protected]>
() Wed, 21 Jul 2010 16:27:54 -0400
(define-module (popgen popgen))
[...]
guile> (set! %load-path (cons (getcwd) %load-path))
guile> (use-modules (popgen popgen))
[...]
<unnamed port>: no code for module (popgen popgen)
ABORT: (misc-error)
Where am I going wrong?
For module name ‘(a b c)’, guile constructs relative filenames:
a/b/c.scm (S: scheme)
a/b/c (R: raw)
and searches for the file DIR/S and DIR/R for each DIR in ‘%load-path’
(see variable ‘%load-extensions’). In this case,
(a b ) ≘ (popgen ) ; module name prefix
c ≘ popgen ; module name leaf
The error you see means that none of these files can be found:
/home/joel/Documents/ss_theory/scm/popgen/popgen.scm
/home/joel/Documents/ss_theory/scm/popgen/popgen
/usr/share/guile/site/popgen/popgen.scm
/usr/share/guile/site/popgen/popgen
/usr/share/guile/1.8/popgen/popgen.scm
/usr/share/guile/1.8/popgen/popgen
/usr/share/guile/popgen/popgen.scm
/usr/share/guile/popgen/popgen
Absent a way to associate a module name to a filesystem directory
in ‘%load-path’ in Scheme (e.g., module catalogs in Guile 1.4.x),
a common workaround is to implement an alias in the filesystem:
ln -s /home/joel/Documents/ss_theory/scm popgen
This approach works here because the module name prefix has length 1.
Another way is to avoid having a prefix in the module name, but that's
probably not a good idea if the module is intended for installation.
Yet another way is to call ‘primitive-load’ prior to ‘use-modules’,
but that's somewhat ugly.
thi