I haven’t dug deep enough into the TR code to know for sure, but I think the 
difference is that structs declare fundamentally new types, whereas inline type 
definitions only declare type aliases. Whether or not this is actually the 
problem is unclear—I don’t know TR well enough to answer that.

> On Jan 23, 2015, at 21:23, Alexander D. Knauth <alexan...@knauth.org> wrote:
> 
> There’s a bug report about this here:
> http://bugs.racket-lang.org/query/?cmd=view&pr=14524 
> <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 
> <mailto: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 <http://lists.racket-lang.org/dev>
> 

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

Reply via email to