Add documentation for async-channel contracts and impersonators
This commit is contained in:
parent
3ab1ad8c93
commit
6e79a582f1
|
@ -11,6 +11,8 @@
|
|||
|
||||
@note-lib-only[racket/async-channel]
|
||||
|
||||
@section{Creating and Using Asynchronous Channels}
|
||||
|
||||
@margin-note/ref{See also @secref["threadmbox"].}
|
||||
|
||||
An @deftech{asynchronous channel} is like a @tech{channel}, but it buffers
|
||||
|
@ -105,5 +107,59 @@ limit); @resultItself{asychronous channel-put event}.}
|
|||
(async-channel-put to-server 'quit)
|
||||
]
|
||||
|
||||
@section{Contracts and Impersonators on Asynchronous Channels}
|
||||
|
||||
@defproc[(async-channel/c [c contract?]) contract?]{
|
||||
|
||||
Returns a contract that recognizes asynchronous channels. Values put into or
|
||||
retrieved from the channel must match @racket[c].
|
||||
|
||||
If the @racket[c] argument is a flat contract or a chaperone contract, then the
|
||||
result will be a chaperone contract. Otherwise, the result will be an
|
||||
impersonator contract.
|
||||
|
||||
When an @racket[async-channel/c] contract is applied to an asynchronous channel,
|
||||
the result is not @racket[eq?] to the input. The result will be either a
|
||||
@tech{chaperone} or @tech{impersonator} of the input depending on the type of
|
||||
contract.}
|
||||
|
||||
@defproc[(impersonate-async-channel [channel async-channel?]
|
||||
[get-proc (any/c . -> . any/c)]
|
||||
[put-proc (any/c . -> . any/c)]
|
||||
[prop impersonator-property?]
|
||||
[prop-val any] ...
|
||||
...)
|
||||
(and/c async-channel? impersonator?)]{
|
||||
|
||||
Returns an impersonator of @racket[channel], which redirects the
|
||||
@racket[async-channel-get] and @racket[async-channel-put] operations.
|
||||
|
||||
The @racket[get-proc] must accept the value that @racket[async-channel-get]
|
||||
produces on @racket[channel]; it must produce a replacement value, which is the
|
||||
result of the get operation on the impersonator.
|
||||
|
||||
The @racket[put-proc] must accept the value passed to @racket[async-channel-put]
|
||||
called on @racket[channel]; it must produce a replacement value, which is the
|
||||
value passed to the put procedure called on the original channel.
|
||||
|
||||
The @racket[get-proc] and @racket[put-proc] procedures are called for all
|
||||
operations that get or put values from the channel, not just
|
||||
@racket[async-channel-get] and @racket[async-channel-put].
|
||||
|
||||
Pairs of @racket[prop] and @racket[prop-val] (the number of arguments to
|
||||
@racket[impersonate-async-channel] must be odd) add
|
||||
@tech{impersonator properties} or override @tech{impersonator property} values
|
||||
of @racket[channel].}
|
||||
|
||||
@defproc[(chaperone-async-channel [channel async-channel?]
|
||||
[get-proc (any/c . -> . any/c)]
|
||||
[put-proc (any/c . -> . any/c)]
|
||||
[prop impersonator-property?]
|
||||
[prop-val any] ...
|
||||
...)
|
||||
(and/c async-channel? chaperone?)]{
|
||||
|
||||
Like @racket[impersonate-async-channel], but the @racket[get-proc] procedure
|
||||
must produce the same value or a chaperone of the original value, and
|
||||
@racket[put-proc] must produce the same value or a chaperone of the original
|
||||
value.}
|
||||
|
|
Loading…
Reference in New Issue
Block a user