Thanks - this solved the problem!&nbsp; Still not quite familiar with parameters I guess ;)&nbsp; And yes I simply copy/paste redefined code into REPL without clearing the old state - I will remember to do that going forward. <br><br>
Thanks,<br>yinso <br><br><div><span class="gmail_quote">On 4/16/07, <b class="gmail_sendername">Matthew Flatt</b> &lt;<a href="mailto:mflatt@cs.utah.edu">mflatt@cs.utah.edu</a>&gt; wrote:</span><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
At Mon, 16 Apr 2007 16:30:36 -0700, &quot;Yin-So Chen&quot; wrote:<br>&gt;&nbsp;&nbsp; (define dispatcher (make-parameter (make-hash-table &#39;equal))) ; run-time<br>&gt; dispatcher...<br><br>`make-parameter&#39; returns a value that acts like a procedure.
<br><br>&gt;&nbsp;&nbsp; (define-syntax (register stx)<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; (syntax-case stx ()<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ((_ key value)<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&#39;(hash-table-put! dispatcher key value))))<br><br>Use `(dispatcher)&#39; instead of `dispatcher&#39; to get the current dispatcher.
<br><br>&gt;&nbsp;&nbsp; (define-syntax (dispatch stx)<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; (syntax-case stx ()<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ((_ key args ...)<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&#39;((hash-table-get dispatcher key) args ...))))<br><br>Same here.<br><br>&gt; (require bar) ; error = define-values: cannot change identifier that is
<br>&gt; instantiated as a module constant: dispatcher<br><br>I get a different result:<br><br> hash-table-put!: expects type &lt;mutable hash-table&gt; as 1st argument,<br> given: #&lt;primitive:parameter-procedure&gt;; other arguments were: test
<br> #&lt;procedure:test&gt;<br><br>For your error:<br><br>I think you must be using raw mzscheme and trying to re-define the<br>`dispatcher&#39; module (as opposed to, say, using DrScheme with its &quot;Run&quot;<br>button that clears out old state before running program).
<br><br>Re-defining a module conflicts with certain optimizations that you&#39;d<br>normally like the compiler to perform. To disable the optimizations and<br>allow module re-definition, use `(compile-enforce-module-constants
<br>#f)&#39;.<br><br>Matthew<br><br></blockquote></div><br><br clear="all"><br>-- <br><a href="http://www.yinsochen.com">http://www.yinsochen.com</a><br>...continuous learning...