[racket] Defining a typed language

From: Sam Tobin-Hochstadt (samth at cs.indiana.edu)
Date: Fri Oct 17 07:59:51 EDT 2014

You should keep the original require and provide, and add the new inserted
require as an extra. Does that work?

Sam
On Oct 17, 2014 6:38 AM, "Konrad Hinsen" <konrad.hinsen at fastmail.net> wrote:

> Sam Tobin-Hochstadt writes:
>
>  > My suggestion is to have your `test-lang` language use
>  > `#%module-begin` to expand into `(tr:module-begin (require
>  > test-lang/more) user-program-here ...)`, which should fix the problem.
>
> Thanks, that sounds like a good idea... but it doesn't work either. Here's
> my new test-lang/main.rkt:
>
> -- test-lang/main.rkt ----------------------------
> #lang typed-racket/minimal
>
> (require typed/racket
>          (only-in typed/racket
>                   [#%module-begin tr:module-begin]
>                   [require tr:require]))
>
> (provide (except-out (all-from-out typed/racket) #%module-begin)
>          (rename-out [module-begin #%module-begin]))
>
> (define-syntax module-begin
>   (syntax-rules ()
>     [(_ decl ...)
>      (tr:module-begin
>       (tr:require test-lang/more)
>       decl ...)]))
> --------------------------------------------------
>
> When I run my test program again:
>
> -- test.rkt --------------------------------------
> #lang test-lang
>
> (: x Integer)
> (define x 42)
> (print x)
>
> (print (bar x))
> --------------------------------------------------
>
> I get the error message
>
>   ; /Users/hinsen/projects/racket/test.rkt:9:8: bar: unbound identifier in
> module
>   ;   in: bar
>
> When I remove the require from begin-module and put it right into test.rkt,
> it works just fine.
>
> I ran both versions through the macro stepper to see where the
> difference comes from. There is a difference right from the start,
> before any macro expansion is done: In the working version (with the
> require in test.rkt), the binding for 'bar' is shown as
>
>    Apparent identifier binding
>    in phase 0:
>      defined in: test-lang/more
>        as: bar.4
>      imported from: test-lang/more
>
> where as in the buggy version (with the require in test-lang/main.rkt) it
> is
>
>    Apparent identifier binding
>    none
>
> This looks like some magic happens even before the first macro
> expansion - I need a magician to figure that out!  ;-)
>
> Konrad.
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.racket-lang.org/users/archive/attachments/20141017/a1a56cba/attachment.html>

Posted on the users mailing list.