diff options
-rw-r--r-- | guix/records.scm | 13 |
1 files changed, 7 insertions, 6 deletions
diff --git a/guix/records.scm b/guix/records.scm index af6396f3dd..bef8ff861b 100644 --- a/guix/records.scm +++ b/guix/records.scm @@ -81,15 +81,18 @@ tuples, and THUNKED is the list of identifiers of thunked fields." (define (thunked-field? f) (memq (syntax->datum f) '#,thunked)) + (define (wrap-field-value f value) + (if (thunked-field? f) + #`(lambda () #,value) + value)) + (define (field-bindings field+value) ;; Return field to value bindings, for use in 'let*' below. (map (lambda (field+value) (syntax-case field+value () ((field value) #`(field - #,(if (thunked-field? #'field) - #'(lambda () value) - #'value))))) + #,(wrap-field-value #'field #'value))))) field+value)) (syntax-case s (inherit #,@fields) @@ -111,9 +114,7 @@ tuples, and THUNKED is the list of identifiers of thunked fields." car) (let ((value (car (assoc-ref dflt (syntax->datum f))))) - (if (thunked-field? f) - #`(lambda () #,value) - value)))) + (wrap-field-value f value)))) (let ((fields (append fields (map car dflt)))) (cond ((lset= eq? fields 'expected) |