Hide #:coerce-method-table from the public generics API.

This commit is contained in:
Vincent St-Amour 2012-05-18 17:20:00 -04:00
parent 8997379f35
commit 991cb5f371
2 changed files with 4 additions and 37 deletions

View File

@ -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) ...)]))

View File

@ -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