There’s a bug report about this here:
http://bugs.racket-lang.org/query/?cmd=view&pr=14524
Though I notice it gives a different error message now.
But why should structure type declarations being a module-wide construct?
Internal function definitions work, and internal type definitions work, so why 
shouldn’t internal structure definitions?


On Jan 22, 2015, at 3:57 PM, Alexis King <lexi.lam...@gmail.com> wrote:

> Simple enough. This works:
> 
> #lang racket
> 
> (define (make-me-a-struct)
>   (struct foo ())
>   (foo))
> 
> (make-me-a-struct) ; => #<foo>
> 
> This does not:
> 
> #lang typed/racket
> 
> (define (make-me-a-struct)
>   (struct foo ())
>   (foo)) ; error: cannot apply a function with unknown arity
> 
> (make-me-a-struct)
> 
> This problem makes sense. Type declarations seem to be a module-wide 
> construct, so a type that should be scoped to a single function doesn’t work. 
> I’m running into this issue when trying to create an executable struct using 
> define-struct/exec from within a macro, which doesn’t work due to this 
> particular problem.
> 
> I can work around this in a variety of ways—I can extract this into an 
> untyped module and use require/typed, I can use vectors to “fake” structs and 
> provide an appropriate interface, etc. Still, I wonder if there are any plans 
> to resolve this type of problem? Since it seems to be an issue with how TR 
> handles types at its core, I’m not even sure how feasible it would be.
> _________________________
>  Racket Developers list:
>  http://lists.racket-lang.org/dev

_________________________
  Racket Developers list:
  http://lists.racket-lang.org/dev

Reply via email to