typed-racket
typed-racket copied to clipboard
custom events require casting
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?
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.