Yes, racket 101 (305?) is that identifiers can only be set!'d in their defining 
module. This is to allow necessary optimizations such as inlining.

If you want to trace `f` from a different module. you can `(define (g . args) 
(apply f args)) (trace g)`, use `g` wherever you use `f`. You won't get any 
calls the library makes internally, but if you're just tracing for your own 
code, you'll be golden.

-Ian

----- Original Message -----
From: "Thomas Lynch" <thomas.ly...@reasoningtechnology.com>
To: "users" <users@racket-lang.org>
Sent: Monday, January 19, 2015 8:59:55 AM
Subject: [racket] trace: set!: cannot mutate module-required identifier - 
alright .. how do you do this?

Saw this in another thread here, but the proposed solution didnt work, well at 
least the way I understood it. So .. 

In file db-lib.rkt I have a definition: 




(provide db-exec) 
(define (db-exec a) ...) 

Then in racket 




> (enter! "db-user.rkt") 

Where db-citation.rkt has 




(require "db-lib.rkt") 

Now at the read-eval-print prompt I try 




(enter! "db-citation.rkt") 

And when I do (trace db-exec) I get the cannot mutate error. (Surely this must 
be a racket 101 type problem.) So I try to include the module at the current 
scope.. 




rac...@db-citation.rkt> (require "db-lib.rkt") 
rac...@db-citation.rkt> (require racket/trace) 
rac...@db-citation.rkt> (trace db-exec) 

rac...@db-citation.rkt> stdin::1130: set!: cannot mutate module-required 
identifier in: db-exec 
ok, so that doesn't work, so I start over again. This time after reading the 
thread on this list 




From: Vincent St-Amour (stamourv at ccs.neu.edu ) 
Date: Mon Oct 10 13:49:46 EDT 2011 

which concludes by saying 'put the trace in your program that should work', so 
I add this to "db-citation.rkt" 




(require racket/trace) 
(trace db-exec) 

And then at the prompt I get the following: 




Welcome to Racket v5.2.1. 
racket@> (enter! "db-citation.rkt") 
db-citation.rkt:26:11: set!: cannot mutate module-required identifier in: 
db-exec 

Alright, so what is the magic incantation here that allows one to debug/trace 
calls in included modules? 

Thanks! 

Thomas 

____________________
  Racket Users list:
  http://lists.racket-lang.org/users
____________________
  Racket Users list:
  http://lists.racket-lang.org/users

Reply via email to