On 11/18/2012 07:02 PM, Ray Racine wrote:
#lang typed/racket

(provide x)

(module M typed/racket
   (provide x)
   (define: x : Natural 3))

(require (submod "."  M))

;; end-of-file

...

Has anyone had a chance to look into this yet?  I'd love to use
submodules in TR.

As a workaround, you can change the parent module's language to "racket" and your specific example will work just fine. You don't have to worry about extra contract checks, because the identifier `x' won't have a contract on it unless it's used in untyped code, even though it's provided by untyped code.

IOW, if your parent module above is named "x.rkt", you can write this:

#lang typed/racket
(require "x.rkt")
x


TR is smart enough to not put a contract on `x'. (I don't think it would in this case anyway, but pretend `x' is a function. It still wouldn't have a contract.)

The array library uses typed submodules a lot, mostly to define typed values and untyped macros that expand to those values in the same file. I did have to split files in a few cases, because I ran into problems having two typed submodules in the same parent module.

I'll let someone else explain that fundamental problem that seems to require rewriting the macro expander to fix it. I also won't speculate on whether that will happen soon.

Neil ⊥

____________________
 Racket Users list:
 http://lists.racket-lang.org/users

Reply via email to