At Fri, 2 Aug 2013 18:32:38 -0400, Asumu Takikawa wrote:
> I'm currently trying to implement contracts for synchronizable events.
> During that, I've discovered that there seems to be an undocumented
> restriction that `chaperone-evt` can only chaperone an event that is not
> a handle event. Here's an example:
> 
>   -> (sync (chaperone-evt (handle-evt always-evt identity)
>                           (lambda (e) (values e identity))))
>   ; wrap-evt: contract violation
>   ;   expected: (and/c evt? (not/c handle-evt?))
>   ;   given: #<evt>
>   ; [,bt for context]

The restriction (which should have been documented) is there the same
reason as for `wrap-evt', since the procedure in place of `identity'
above gets to adjust the result of the event --- and so handling can't
be in tail position with respect to `sync'.

But I'm ready to throw out the `(not/c handle-evt?)' restrictions
everywhere.

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

Reply via email to