[racket] export/import problem, and how to debug
You didn't provide rename-in (etc).
You need to provide all the require/provide transformers you want.
Jay
On Tue, Aug 3, 2010 at 12:13 PM, Shriram Krishnamurthi <sk at cs.brown.edu> wrote:
> Let me see if I can reduce my problem to the simplest case. Here is a
> program that works fine:
>
> -----
> #lang racket
> (require (rename-in racket/tcp
> (tcp-accept accept)
> (tcp-listen listen)))
> -----
>
> (It's from the docs, and it works as you would expect. I only say all
> this to say I've checked the syntax of this expression.)
>
> This is illegal in ASL:
>
> -----
> #lang s-exp lang/htdp-advanced
> (require (rename-in racket/tcp
> (tcp-accept accept)
> (tcp-listen listen)))
> -----
>
> require: expected a module name as a string, a `lib' form, or a
> `planet' form, found something else in: (rename-in racket/tcp
> (tcp-accept accept) (tcp-listen listen))
>
> [Same error if I use the (module ...) form at the REPL.]
>
> Let's say I want to give students access to require-on-steroids. So I
> define this language (sk-test-lang.rkt):
>
> -----
> #lang racket
> (require [except-in lang/htdp-advanced require])
> (provide require
> [except-out (all-from-out lang/htdp-advanced)])
> -----
>
> When I check syntax and highlight "require" on the provide line, the
> arrow points to "racket". Great.
>
> Now I try to use this. First I'll do something simple (and you'll see
> why in a moment):
>
> -----
> #lang s-exp "sk-test-lang.rkt"
> (require "lib.rkt")
> -----
>
> This works fine, importing what lib.rkt provides. When I check
> syntax, the "require" comes from "sk-test-lang.rkt". This hopefully
> means that by transitivity, require comes from racket.
>
> So now I try this:
>
> -----
> #lang s-exp "sk-test-lang.rkt"
> (require (rename-in racket/tcp
> (tcp-accept accept)
> (tcp-listen listen)))
> -----
>
> But I get
>
> rename-in: not a require sub-form in: (rename-in racket/tcp
> (tcp-accept accept) (tcp-listen listen))
>
> The thing that boggles my mind is that this error message is NEITHER
> the one that you would get from racket itself (since this is not an
> error in racket), NOR the one from ASL (since I've shown you the error
> text above).
>
> So:
>
> 1. Where is require coming from?
>
> 2. How could I go about figuring this for myself? (The macro stepper
> doesn't seem useful, or at least I don't see how to use it here.)
>
> 3. How do I fix my program? (-:
>
> Shriram
> _________________________________________________
> For list-related administrative tasks:
> http://lists.racket-lang.org/listinfo/users
>
--
Jay McCarthy <jay at cs.byu.edu>
Assistant Professor / Brigham Young University
http://teammccarthy.org/jay
"The glory of God is Intelligence" - D&C 93