racket / typed-racket

Typed Racket
Other
527 stars 104 forks source link

custom events require casting #167

Open mordae opened 9 years ago

mordae commented 9 years ago

Custom events cannot be supplied to sync. For example:

-> (struct: (a) reply
     ((evt : (Evtof a)))
     #:property prop:evt (struct-field-index evt))
-> (sync (reply always-evt))
; readline-input:4:0: Type Checker: Polymorphic function `sync' could not be
;   applied to arguments:
; Domain: (Evtof a) *
; Arguments: (reply (Rec x (Evtof x)))
;   in: (sync (reply always-evt))
; [,bt for context]
-> (sync (cast (reply always-evt) (Rec x (Evtof x))))
- : (Rec x (Evtof x))
#<always-evt>

On the other hand, some well-known non-pure-evt types seem to work fine.

-> (sync (current-input-port))
- : Input-Port
#<input-port:readline-input>

Help?

AlexKnauth commented 9 years ago

That's because struct-type properties aren't really supported yet, I believe.

That's why the current docs for struct don't actually mention them, and I believe that's also why define-struct/exec is provided for the special case of prop:procedure.