Hide #:coerce-method-table from the public generics API.
This commit is contained in:
parent
8997379f35
commit
991cb5f371
|
@ -25,11 +25,12 @@
|
|||
(define-generics (name prop:name name?)
|
||||
(generic . generic-args) ...))))]))
|
||||
|
||||
(define-syntax (define-generics stx) ; allows out-of-order kw args
|
||||
(define-syntax (define-generics stx) ; allows out-of-order / optional kw args
|
||||
(syntax-case stx () ; can't use syntax-parse, since it depends on us
|
||||
[(_ (name prop:name name?) (generic . generics-args) ...)
|
||||
#'(define-generics/pre (name prop:name name?
|
||||
#:defined-table defined-table
|
||||
;; coerce-method-table is not public
|
||||
#:coerce-method-table #f)
|
||||
(generic . generics-args) ...)]
|
||||
[(_ (name prop:name name? #:defined-table defined-table)
|
||||
|
@ -37,27 +38,4 @@
|
|||
#'(define-generics/pre (name prop:name name?
|
||||
#:defined-table defined-table
|
||||
#:coerce-method-table #f)
|
||||
(generic . generics-args) ...)]
|
||||
[(_ (name prop:name name? #:coerce-method-table coerce-method-table)
|
||||
(generic . generics-args) ...)
|
||||
#'(define-generics/pre (name prop:name name?
|
||||
#:defined-table defined-table ; fresh
|
||||
#:coerce-method-table coerce-method-table)
|
||||
(generic . generics-args) ...)]
|
||||
[(_ (name prop:name name?
|
||||
#:coerce-method-table coerce-method-table
|
||||
#:defined-table defined-table)
|
||||
(generic . generic-args) ...)
|
||||
#'(define-generics/pre (name prop:name name?
|
||||
#:defined-table defined-table
|
||||
#:coerce-method-table coerce-method-table)
|
||||
(generic . generics-args) ...)]
|
||||
[(_ (name prop:name name?
|
||||
#:defined-table defined-table
|
||||
;; use of coercion functions is explained below
|
||||
#:coerce-method-table coerce-method-table)
|
||||
(generic . generic-args) ...)
|
||||
#'(define-generics/pre (name prop:name name?
|
||||
#:defined-table defined-table
|
||||
#:coerce-method-table coerce-method-table)
|
||||
(generic . generic-args) ...)]))
|
||||
(generic . generics-args) ...)]))
|
||||
|
|
|
@ -10,8 +10,7 @@
|
|||
@defmodule[racket/generics]
|
||||
|
||||
@defform/subs[(define-generics (name prop:name name?
|
||||
[#:defined-table defined-table]
|
||||
[#:coerce-method-table coerce-method-table])
|
||||
[#:defined-table defined-table])
|
||||
[method . kw-formals*]
|
||||
...)
|
||||
([kw-formals* (arg* ...)
|
||||
|
@ -56,16 +55,6 @@ method is implemented by that instance. The intended use case for this table is
|
|||
to allow higher-level APIs to adapt their behavior depending on method
|
||||
availability.
|
||||
|
||||
The optional @racket[coerce-method-table] argument is used when implementing a
|
||||
generics-based extension API for a syntax property that already has its own
|
||||
extension API, while preserving backwards compatibility. This functionality is
|
||||
intended for library writers updating their extension APIs to use generics.
|
||||
@racket[coerce-method-table] should be bound to a coercion function that
|
||||
accepts valid values for @racket[prop:name] under its old extension API, and
|
||||
produces a vector of method implementations ordered as in the generics
|
||||
definition. This allows implementations that were defined under the old
|
||||
extension API to coexist with those defined using the generics-based API.
|
||||
|
||||
}
|
||||
|
||||
@defform[(generics name
|
||||
|
|
Loading…
Reference in New Issue
Block a user