chicken-janitors
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Chicken-janitors] #1355: make define-record-type setters hygienic


From: Chicken Trac
Subject: Re: [Chicken-janitors] #1355: make define-record-type setters hygienic
Date: Mon, 20 Mar 2017 14:34:02 -0000

#1355: make define-record-type setters hygienic
-------------------------------------+-------------------------------------
            Reporter:  ashinn        |      Owner:
                Type:  defect        |     Status:  new
            Priority:  major         |  Milestone:  someday
           Component:  core          |    Version:  4.12.0
  libraries                          |   Keywords:  define-record-type,
          Resolution:                |  hygiene
Estimated difficulty:                |
-------------------------------------+-------------------------------------

Comment (by ashinn):

 A stripped down version:

 {{{
 (use test)

 (define-syntax %defrec
   (syntax-rules ()
     ((%defrec name make pred ((field get %set set) ...) ())
      (begin
        (define-record-type name make pred
          (field get %set) ...)
        (define (set x v)
          (display "mutation is evil!\n")
          (%set x v))
        ...))
     ((%defrec name make pred (fields ...) ((field get set) . rest))
      (%defrec name make pred (fields ... (field get %set set)) rest))))

 (define-syntax defrec
   (syntax-rules ()
     ((defrec name make pred . fields)
      (%defrec name make pred () fields))))

 (defrec stuff (make-stuff foo bar) stuff?
   (foo stuff-foo stuff-foo-set!)
   (bar stuff-bar stuff-bar-set!))

 (test-begin)
 (let ((x (make-stuff "ab" "bar")))
   (test "ab" (stuff-foo x))
   (test "bar" (stuff-bar x))
   (stuff-foo-set! x "xy")    ;; <----- this uses the wrong %set
   (test "xy" (stuff-foo x))
   (test "bar" (stuff-bar x)))
 (test-end)
 }}}

--
Ticket URL: <https://bugs.call-cc.org/ticket/1355#comment:1>
CHICKEN Scheme <https://www.call-cc.org/>
CHICKEN Scheme is a compiler for the Scheme programming language.

reply via email to

[Prev in Thread] Current Thread [Next in Thread]