diff options
author | Ludovic Courtès <ludo@gnu.org> | 2015-01-19 22:27:58 +0100 |
---|---|---|
committer | Ludovic Courtès <ludo@gnu.org> | 2015-01-19 23:30:42 +0100 |
commit | 9b543456d751eff094a52e98ecebc8030542f728 (patch) | |
tree | 29f6b95a17b633cbcf191ec477faf605d59f8b5f | |
parent | eb497b6616519ecfb1bdaf05d4b1efb520c9e020 (diff) | |
download | gnu-guix-9b543456d751eff094a52e98ecebc8030542f728.tar gnu-guix-9b543456d751eff094a52e98ecebc8030542f728.tar.gz |
records: Use keyword parameters for 'make-syntactic-constructor'.
* guix/records.scm (define-record-type*)[make-syntactic-constructor]:
Turn THUNKED and DEFAULTS into keyword arguments.
Adjust caller accordingly. Declare 'thunked' and 'defaults' local
variables.
-rw-r--r-- | guix/records.scm | 14 |
1 files changed, 8 insertions, 6 deletions
diff --git a/guix/records.scm b/guix/records.scm index e7b86af9aa..c833fdb339 100644 --- a/guix/records.scm +++ b/guix/records.scm @@ -78,7 +78,8 @@ It is possible to copy an object 'x' created with 'thing' like this: This expression returns a new object equal to 'x' except for its 'name' field." - (define (make-syntactic-constructor type name ctor fields thunked defaults) + (define* (make-syntactic-constructor type name ctor fields + #:key thunked defaults) "Make the syntactic constructor NAME for TYPE, that calls CTOR, and expects all of FIELDS to be initialized. DEFAULTS is the list of FIELD/DEFAULT-VALUE tuples, and THUNKED is the list of identifiers of @@ -219,7 +220,10 @@ thunked fields." (syntax-case s () ((_ type syntactic-ctor ctor pred (field get options ...) ...) - (let* ((field-spec #'((field get options ...) ...))) + (let* ((field-spec #'((field get options ...) ...)) + (thunked (filter-map thunked-field? field-spec)) + (defaults (filter-map field-default-value + #'((field options ...) ...)))) (with-syntax (((field-spec* ...) (map field-spec->srfi-9 field-spec)) ((thunked-field-accessor ...) @@ -236,10 +240,8 @@ thunked fields." (begin thunked-field-accessor ...) #,(make-syntactic-constructor #'type #'syntactic-ctor #'ctor #'(field ...) - (filter-map thunked-field? field-spec) - (filter-map field-default-value - #'((field options ...) - ...)))))))))) + #:thunked thunked + #:defaults defaults)))))))) (define* (alist->record alist make keys #:optional (multiple-value-keys '())) |