[racket-dev] single-instantiation trick: kludgy workaround for planet packages?

From: Carl Eastlund (cce at ccs.neu.edu)
Date: Tue Oct 5 18:03:05 EDT 2010


See "this-package-in", found both in the cce/scheme planet package and
in unstable/require.  If you write (prefix-in drlink: (this-package-in
private/drracket-link)) you should get the behavior you want, and it
should be less fragile than the explicit "planet" path.

Carl Eastlund

On Tue, Oct 5, 2010 at 5:59 PM, John Clements <clements at brinckerhoff.org> wrote:
> A couple of weeks ago, you showed me the trick that rackunit uses to allow single-instantiation of a modules.  I'm now trying to do this
> for a planet package, and it looks like I have to change the required module from being a relative to being an absolute path.  That is:
> (require (prefix-in drlink: private/drracket-link))
> must become
> (require (prefix-in drlink: (planet "drracket-link.rkt" ("clements" "rsound.plt") "private")))
> This works, but seems extremely fragile.  Does it make sense to you that this would be required?  Without it, I get the error below:
> namespace-attach-module: unknown module (in the source namespace): #<resolved-module-path:"/Users/clements/clements/planet-collects/rsound/private/drracket-link.rkt">
>  === context ===
> /Users/clements/plt/collects/drracket/private/rep.rkt:1660:6: initialize-console method in ...cket/private/rep.rkt:508:4
> /Users/clements/plt/collects/drracket/private/unit.rkt:4755:4: create-new-drscheme-frame
> /Users/clements/plt/collects/drracket/private/main.rkt:663:0: make-basic
> /Users/clements/plt/collects/drracket/tool-lib.rkt: [running body]
> /Users/clements/plt/collects/drracket/private/drracket-normal.rkt: [running body]
> /Users/clements/plt/collects/drracket/drracket.rkt: [running body]
> semi-happy,
> John

Posted on the dev mailing list.