[racket] Fw: Splitting Racket source code by scope?

From: Rüdiger Asche (rac at ruediger-asche.de)
Date: Wed Feb 29 18:12:05 EST 2012

> You wrote:
> -------------------------------------------------------------------------------
> As Matthias mentions, you can formally link together "units" together.
> Units are Racket's dependency-injection component framework.  You can
> read documentation about them here:
>    http://docs.racket-lang.org/guide/units.html
> --------------------------------------------------------------------------------
> Thanks for the pointer, but unfortunately, the docs as they are don't seem 
> to provide a meaningful starting point for experimenting with the code, or 
> I may be too daft to make sense of it (probably the latter). Here's what I 
> did:
> 1. Copy-and-paste the four code fragments verbatim into four files named 
> (as the docs suggested) toy-factory-sig.rkt, simple-factory-unit.rkt, 
> toy-store-sig.rkt and toy-store-unit.rkt, respectively
> 2. Changed all require references to (require (file 
> "f://testpath//toy-store-sig.rkt")) etc because I couldn't find any other
> way for wither DrRacket or Racket to accept the paths
> 3. (as the docs suggested) typed (require (file 
> "f://testpath//simple-factory-unit.rkt")) in DrRacket
> DrRacket now responded with
> ..\..\install\racket\collects\syntax\modcode.rkt:46:8: load-handler: 
> expected a `module' declaration for `simple-factory-unit' in 
> #<path:f:\testpath\simple-factory-unit.rkt>, but found something else
> looking through some older discussions, I discovered that the module 
> headers seem to be mandatory to be able to work with units, but they are 
> implicitly added when the language is set to racket/unit. I tried that on 
> the top level in DrRacket but would get the same error. I then tried 
> adding #lang racket/unit to all files but got this error:
> f:\testpath\simple-factory-unit.rkt:1:0: #%module-begin: missing an 
> `import' clause in: (#%module-begin (require (file 
> "f://testpath//toy-factory-sig.rkt")) (define-unit simple-factory@ 
> (import) (export toy-factory^) (printf "Factory started.\n") 
> (define-struct toy (color) #:transparent) (define (build-toys n) (for/list 
> ((i (in-range n))) (make-toy (quote blue)))) (define (repaint t col) 
> (make-toy col))) (provide simple-factory@))
> I would REALLY like to understand the concepts, but in order to do that, I 
> need to have working code that I can play around with. Could anybody 
> please provide a working instruction to get the code samples from the 
> documentation to run so I have a starting point? That means either provide 
> explicit module wrappers for the files or describe a way to set the 
> language such that the code runs as is?
> Thanks again to this really great and dedicated community!

Posted on the users mailing list.