records: define-record-type*: Field bindings are bound with 'let*'.
authorLudovic Courtès <ludo@gnu.org>
Tue, 15 Oct 2013 21:31:22 +0000 (23:31 +0200)
committerLudovic Courtès <ludo@gnu.org>
Tue, 15 Oct 2013 21:31:22 +0000 (23:31 +0200)
* guix/records.scm (define-record-type*): Wrap field bindings in a
  'let*', not in a 'letrec*', which turned out to be pointlessly
  inconvenient.
* tests/records.scm: Adjust test names accordingly.

guix/records.scm
tests/records.scm

index d47bbf8..37d34b4 100644 (file)
@@ -73,7 +73,7 @@ thunked fields."
                 (memq (syntax->datum f) '#,thunked))
 
               (define (field-bindings field+value)
-                ;; Return field to value bindings, for use in `letrec*' below.
+                ;; Return field to value bindings, for use in 'let*' below.
                 (map (lambda (field+value)
                        (syntax-case field+value ()
                          ((field value)
@@ -85,7 +85,7 @@ thunked fields."
 
               (syntax-case s (inherit #,@fields)
                 ((_ (inherit orig-record) (field value) (... ...))
-                 #`(letrec* #,(field-bindings #'((field value) (... ...)))
+                 #`(let* #,(field-bindings #'((field value) (... ...)))
                      #,(record-inheritance #'orig-record
                                            #'((field value) (... ...)))))
                 ((_ (field value) (... ...))
@@ -116,8 +116,8 @@ thunked fields."
                                                       s)))))
                      (let ((fields (append fields (map car dflt))))
                        (cond ((lset= eq? fields 'expected)
-                              #`(letrec* #,(field-bindings
-                                            #'((field value) (... ...)))
+                              #`(let* #,(field-bindings
+                                         #'((field value) (... ...)))
                                   (ctor #,@(map field-value 'expected))))
                              ((pair? (lset-difference eq? fields 'expected))
                               (error* "extraneous field initializers ~a"
index 851ff7b..15709ac 100644 (file)
@@ -36,9 +36,9 @@
          (match (foo (bar 1))
            (($ <foo> 1 42) #t)))))
 
-(test-assert "define-record-type* with letrec* behavior"
+(test-assert "define-record-type* with let* behavior"
   ;; Make sure field initializers can refer to each other as if they were in
-  ;; a `letrec*'.
+  ;; a 'let*'.
   (begin
     (define-record-type* <bar> bar make-bar
       foo?
@@ -69,7 +69,7 @@
           (equal? c d)
           (match e (($ <foo> 42 77) #t))))))
 
-(test-assert "define-record-type* & inherit & letrec* behavior"
+(test-assert "define-record-type* & inherit & let* behavior"
   (begin
     (define-record-type* <foo> foo make-foo
       foo?