Remove vestigial set of parens and fix docs for new syntax.
This commit is contained in:
parent
94bd484a66
commit
3210cd1d12
|
@ -14,10 +14,10 @@
|
|||
|
||||
(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) (generic . generics-args) ...)
|
||||
#'(define-generics (name #:defined-table defined-table)
|
||||
[(_ name (generic . generics-args) ...)
|
||||
#'(define-generics name #:defined-table defined-table
|
||||
(generic . generics-args) ...)]
|
||||
[(_ (name #:defined-table defined-table)
|
||||
[(_ name #:defined-table defined-table
|
||||
(generic . generics-args) ...)
|
||||
(local [(define name-str (symbol->string (syntax-e #'name)))
|
||||
(define (id . strs)
|
||||
|
|
|
@ -15,8 +15,7 @@ using a @racket[define-generics] form. Method implementations for
|
|||
a structure type are defined using the @racket[#:methods] keyword
|
||||
(see @secref["define-struct"]).
|
||||
|
||||
@defform/subs[(define-generics (gen:name prop:name name?
|
||||
[#:defined-table defined-table])
|
||||
@defform/subs[(define-generics name [#:defined-table defined-table]
|
||||
[method . kw-formals*]
|
||||
...)
|
||||
([kw-formals* (arg* ...)
|
||||
|
@ -27,22 +26,12 @@ a structure type are defined using the @racket[#:methods] keyword
|
|||
(code:line keyword id)
|
||||
(code:line keyword [id])])
|
||||
#:contracts
|
||||
([gen:name identifier?]
|
||||
[prop:name identifier?]
|
||||
[name? identifier?]
|
||||
([name identifier?]
|
||||
[defined-table identifier?]
|
||||
[method identifier?])]{
|
||||
|
||||
Defines @racket[gen:name] as a transformer binding for the static
|
||||
information about a new generic group.
|
||||
|
||||
Defines @racket[prop:name] as a structure type property. Structure
|
||||
types implementing this generic group should have this property where
|
||||
the value is a vector with one element per @racket[method] where each
|
||||
value is either @racket[#f] or a procedure with the same arity as
|
||||
specified by @racket[kw-formals*]. (@racket[kw-formals*] is similar to
|
||||
the @racket[kw-formals] used by @racket[lambda], except no expression is
|
||||
given for optional arguments.) The arity of each method is checked by
|
||||
the guard on the structure type property.
|
||||
information about a new generic interface.
|
||||
|
||||
Defines @racket[name?] as a predicate identifying instances of structure
|
||||
types that implement this generic group.
|
||||
|
@ -50,7 +39,7 @@ types that implement this generic group.
|
|||
Defines each @racket[method] as a generic procedure that calls the
|
||||
corresponding method on values where @racket[name?] is true. Each method
|
||||
must have a required by-position argument that is
|
||||
@racket[free-identifier=?] to @racket[gen:name]. This argument is used in
|
||||
@racket[free-identifier=?] to @racket[name]. This argument is used in
|
||||
the generic definition to locate the specialization.
|
||||
|
||||
The optional @racket[defined-table] argument should be an identifier.
|
||||
|
@ -89,7 +78,7 @@ with @racket[#:methods].
|
|||
@(define evaluator (new-evaluator))
|
||||
|
||||
@examples[#:eval evaluator
|
||||
(define-generics (printable)
|
||||
(define-generics printable
|
||||
(gen-print printable [port])
|
||||
(gen-port-print port printable)
|
||||
(gen-print* printable [port] #:width width #:height [height]))
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
(require racket/generics racket/port)
|
||||
|
||||
(define-generics (printable)
|
||||
(define-generics printable
|
||||
(gen-print printable [port])
|
||||
(gen-port-print port printable)
|
||||
(gen-print* printable [port] #:width width #:height [height]))
|
||||
|
|
|
@ -13,7 +13,7 @@
|
|||
|
||||
(test #:on-pass 'quiet
|
||||
(local
|
||||
[(define-generics (lots)
|
||||
[(define-generics lots
|
||||
(f #:foo foo lots zog [def]))
|
||||
|
||||
(define-struct ex ()
|
||||
|
@ -26,7 +26,7 @@
|
|||
(f (make-ex) 2 #:foo 3) => 1))
|
||||
|
||||
(local
|
||||
[(define-generics (lots)
|
||||
[(define-generics lots
|
||||
(f #:foo foo lots zog #:def [def]))
|
||||
|
||||
(define-struct ex ()
|
||||
|
@ -39,7 +39,7 @@
|
|||
(f (make-ex) 3 #:foo 1) => 1))
|
||||
|
||||
(local
|
||||
[(define-generics (lots)
|
||||
[(define-generics lots
|
||||
(f lots idx val))
|
||||
|
||||
(define-struct ex ()
|
||||
|
@ -53,7 +53,7 @@
|
|||
(f (make-ex) 4 1) => (expt 2 4)))
|
||||
|
||||
(local
|
||||
[(define-generics (table)
|
||||
[(define-generics table
|
||||
(get table idx [default])
|
||||
(weird-get idx table)
|
||||
(put! table idx new))
|
||||
|
@ -92,18 +92,18 @@
|
|||
1))
|
||||
|
||||
(test #:on-pass 'quiet
|
||||
(define-generics (table)
|
||||
(define-generics table
|
||||
(get idx [default]))
|
||||
=error>
|
||||
"No required by-position generic argument"
|
||||
|
||||
(define-generics (table)
|
||||
(define-generics table
|
||||
(get idx [table] [default]))
|
||||
=error>
|
||||
"No required by-position generic argument")
|
||||
|
||||
|
||||
(local [(define-generics (printable)
|
||||
(local [(define-generics printable
|
||||
(gen-print printable [port])
|
||||
(gen-port-print port printable)
|
||||
(gen-print* printable [port] #:width width #:height [height]))
|
||||
|
|
Loading…
Reference in New Issue
Block a user