[plt-scheme] Modules and extensions (yes, again)

From: Pedro Pinto (ppinto at cs.cmu.edu)
Date: Fri Apr 18 18:31:25 EDT 2003

Hi there,

I posted here last week with question on modules and extensions.
Basically my question was how to use require to load a module which was
created by an extension with a name unknown until runtime. Matthew was
kind enough to point me to the `current-module-name-resolver' parameter.

I tried that with mixed results. This is what I did:

(define (my-resolver path x y)
     (define standard-resolver

     (if (and (pair? path)
              (eq? (car path) 'library))
         (standard-resolver path x y)))

(current-module-name-resolver my-resolver)

Where my-create-module is part of an extension:

Scheme_Object *myCreateModule (int argc, Scheme_Object **argv)
	Scheme_Object *moduleSymbol = 

	Scheme_Env *env = 

// add some definitions here
	  return moduleSymbol;

The problem with this is that:

(require (library '()))

ends up invoking my-resolver (and myCreateModule) twice (although it
otherwise works as intended).

What I am missing here?

Thanks in advance,

At Sat, 12 Apr 2003 23:02:02 -0400, "Pedro Pinto" wrote:
> My extension provides a function, load-library, which when invoked
> will load a text file and based on the contents of the that file
> create a new module containing a set of bindings. The module name is
> dependent on the contents of said file and is returned by
> load-library. 
> So how can I import the bindings created?
> I tried 
> (require (load-library "mylibrary"))
> which of course does not work since what is returned is a module name
> not a file.

You'll probably have to change the module-name resolver to recognize
`load-library'. The moudle-name resolver is set through the
`current-module-name-resolver' parameter.


Posted on the users mailing list.