That's precisely the behavior you want: -- what's exported is the public name, which would usually check/do things before it calls private -- while the unprotected private one is not provided and should not be visilble.
How does the mechanics work? Well it delivers path names to these private identifier that in principle you can find too. So you can get around provided/not-provided but you don't want to -- Matthias On Feb 26, 2014, at 11:51 AM, Matthew Butterick <[email protected]> wrote: > In this example, why can syntax produced via macro reach the private > function, while the ordinary syntax cannot? > > > ;;;;;;;;;;;;;;;;;;;;;;;; > ;; one.rkt > #lang racket/base > > (provide public-proc) > > (define (private-proc x) > (format "The private proc says ~a" x)) > > (define-syntax-rule (public-proc x) > (private-proc x)) > ;;;;;;;;;;;;;;;;;;;;;;;; > > ;;;;;;;;;;;;;;;;;;;;;;;; > ;; two.rkt > #lang racket/base > (require "one.rkt") > ;;;;;;;;;;;;;;;;;;;;;;;; > > Running two.rkt: >> (public-proc 'hi) > "The private proc says hi" >> (private-proc 'hi) > private-proc: undefined > ____________________ > Racket Users list: > http://lists.racket-lang.org/users ____________________ Racket Users list: http://lists.racket-lang.org/users

