I think namespace-attach-module is one way to do this: #lang racket (module a racket (define ns (make-base-namespace)) (namespace-attach-module (current-namespace) 'racket/promise ns) (parameterize ((current-namespace ns)) (namespace-require 'racket)) (define *promise? (namespace-variable-value 'promise? #t #f ns)) (*promise? (lazy 1))) (require 'a) ; #t
On Aug 1, 2015, at 8:03 PM, Jos Koot <jos.k...@gmail.com> wrote: > Some (I think many) modules define struct types and provide the constructors > and predicates of these structs. A predicate of an instance of such a module > does not recognize a struct made by a distinct instance of the same module. > For example: > > #lang racket > (module a racket > (define ns (make-base-namespace)) > (parameterize ((current-namespace ns)) (namespace-require 'racket)) > (define *promise? (namespace-variable-value 'promise? #t #f ns)) > (*promise? (lazy 1))) > (require 'a) ; -> #f where I would want #t > > I know there is a solution for this problem: > > #lang racket > (module b racket > (define-namespace-anchor id) > (define ns (namespace-anchor->namespace id)) > (void (parameterize ((current-namespace ns)) (namespace-anchor->namespace > id))) > (define *promise? (namespace-variable-value 'promise? #t #f ns)) > (*promise? (lazy 1))) > (require 'b) ; -> #t as wanted > Nevertheless, is there any chance to modify things such that once a module > has been instantiated, each new require of that module gives the same > instantiation? > May be there are reasons not to do so, but I do not know why not. > > Your opinion would be much appreciated. > Thanks, > Jos Koot > > > > > -- > You received this message because you are subscribed to the Google Groups > "Racket Users" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to racket-users+unsubscr...@googlegroups.com. > For more options, visit https://groups.google.com/d/optout. -- You received this message because you are subscribed to the Google Groups "Racket Users" group. To unsubscribe from this group and stop receiving emails from it, send an email to racket-users+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.