[racket] DrRacket and Modules

From: Harry Spier (harryspier at hotmail.com)
Date: Mon Aug 15 00:02:06 EDT 2011

When I run the following code in DrRacket it behaves somewhat differently than the documentation says a module should. 

(module m racket
  (define x 10)
  (define cons 1))

The Racket reference says:
One difference between a module and a top-level definition is that a module can be declared without instantiating its module-level definitions. Evaluation of a require instantiates (i.e., triggers the instantiation of) a declared module, which creates variables that correspond to its module-level definitions.

For example, given the module declaration
(module m racket
  (define x 10))

the evaluation of (require 'm) creates the variable x and installs 10 as its value. This x is unrelated to any top-level definition of x.

But when I run the above code, the interactions window shows that x is defined as 10 even though I don't execute a require statement.

Also the Racket Guide says:
A module-level define can bind only identifiers that are not already bound within the module. For example, (define cons 1) is a syntax error in a racket module, since cons is provided by racket. A local define or other binding forms, however, can give a new local binding for an identifier that already has a binding; such a binding shadows the existing binding.
But DrRacket doesn't give an error for (define cons 1) and the interactions window shows cons has been redefined as 1.

Could someone explain why the behavior in DrRacket differs in these cases from the documentation.

Thanks in advance,
Harry Spier
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.racket-lang.org/users/archive/attachments/20110815/c883e35b/attachment.html>

Posted on the users mailing list.