There’s a bug report about this here:
http://bugs.racket-lang.org/query/?cmd=viewpr=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