[racket] Defining a typed language

From: Sam Tobin-Hochstadt (samth at cs.indiana.edu)
Date: Mon Oct 27 22:53:57 EDT 2014

I don't understand that, unfortunately.

Sam

On Mon, Oct 27, 2014 at 5:43 AM, Alexander D. Knauth
<alexander at knauth.org> wrote:
> I had made a pull request about this that was almost the same, but something really weird was happening with require that I don’t understand.
>
> I had tried it with (datum->syntax stx ‘(require a-typed-lang/more)), and that worked, as long as a-typed-lang/main.rkt _didn’t_ require a-typed-lang/more.
>
> So it didn’t work if (require a-typed-lang/more) was in a-typed-lang/main.rkt, it didn’t work, but commenting that out made it work again.
>
> Does anyone know what’s happening here?
>
> https://github.com/AlexKnauth/racket-typed-lang/commit/da05d39e3f3f6349fe1e4508214e798f23d6e08e#diff-17746ffaeb9e57be950d8d7212288771L4
>
> On Oct 26, 2014, at 9:36 PM, E. Moran <l-rkt at agate7blue.fastmail.fm> wrote:
>
>> On Mon Oct 20 07:08:54 EDT 2014, Konrad Hinsen wrote:
>>> I have put the code on Github for easier access:
>>>
>>>  https://github.com/khinsen/racket-typed-lang
>>>
>>> Once this works, it can serve as a template for others.
>>
>> Thanks for posting this...  I was just wondering whether you've considered using
>> datum->syntax here.  It'd maybe not be the most elegant solution,
>> but it would at least give you a working language.
>>
>>  -- a-typed-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 ix)
>>    (syntax-case ix ()
>>      [(_ rest ...)
>>       (with-syntax
>>         ([rix
>>           ; tr:require keeps the meaning that it has in this module, but the
>>           ; s-exp as a whole lands in the *caller's* lexical context...
>>           (datum->syntax ix (list #'tr:require 'a-typed-lang/more))])
>>         #'(tr:module-begin
>>             rix
>>             rest ...))]))
>>
>>  -- a-typed-lang/more.rkt -------------
>>
>>  #lang typed/racket
>>
>>  (provide foo)
>>
>>  (: foo (Integer -> Integer))
>>  (define (foo x)
>>    (* 2 x))
>>
>>  -- example.rkt -----------------------
>>
>>  #lang a-typed-lang
>>
>>  (: x Integer)
>>  (define x 42)
>>
>>  (displayln x)
>>
>>  (displayln (foo x))
>>
>>  (displayln (impersonator? foo))
>>
>> The above works under v5.3.4, anyway.
>>
>> Hope this helps...  Evan
>> ____________________
>>  Racket Users list:
>>  http://lists.racket-lang.org/users
>
>
> ____________________
>   Racket Users list:
>   http://lists.racket-lang.org/users


Posted on the users mailing list.