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

Reply via email to