[racket-dev] define #lang and use in same file (+ some funny behavior)

From: Carl Eastlund (cce at ccs.neu.edu)
Date: Mon Dec 3 16:44:34 EST 2012

You can't define the reader part of a #lang in the same file and then use
it, but you can definitely define the bindings, from things like
#%module-begin and #%app on up, and use it in the same file.  The following
works fine for me:

#lang racket

(module greeting racket
  (provide #%module-begin)
  (require (for-syntax syntax/parse))
  (define-syntax #%module-begin
    (syntax-parser
      [(_ one:str two:str)
       #'(#%plain-module-begin
           (printf "Hello, ~a!\n" 'one)
           (printf "Salutations, ~a!\n" 'two))])))

(module main (submod ".." greeting)
  "Santa Claus"
  "Easter Bunny")


Carl Eastlund


On Mon, Dec 3, 2012 at 3:46 PM, Stephen Chang <stchang at ccs.neu.edu> wrote:

> When doing quick experiments, I've often wanted the ability to define
> a new language and then use it in the same file. I thought submodules
> might allow me to do this, but I've realized that I still can't.
> However, in trying to do so I ran into some interesting behavior:
>
>
> Here is a file named test.rkt that is saved to disk:
>
>     #lang racket
>
>     (define-syntax-rule (app x ...) (begin (displayln "hello") (#%app x
> ...)))
>
>     (provide (except-out (all-from-out racket) #%app)
>              (rename-out [app #%app]))
>
>
> If I then add to the same file:
>
>     (module test "test.rkt" (+ 1 2))
>
> but *don't* save, pressing run in drracket displays:
>
> Welcome to DrRacket, version 5.3.1.1 [3m].
> Language: racket [custom].
> hello
> 3
> >
>
>
> Then if I save and run again, I get an error:
>
> Welcome to DrRacket, version 5.3.1.1 [3m].
> Language: racket [custom].
> . . ../plt/collects/compiler/cm.rkt:350:0:
> standard-module-name-resolver: cycle in loading
>   at path: /home/stchang/tmp/test.rkt
>   paths:
>    /home/stchang/tmp/test.rkt
> >
>
>
> Is this the intended behavior? I guess this is what I would expect but
> it feels funny since an identical buffer produces different output
> depending on it's saved status.
> _________________________
>   Racket Developers list:
>   http://lists.racket-lang.org/dev
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.racket-lang.org/dev/archive/attachments/20121203/b43d50bd/attachment.html>

Posted on the dev mailing list.