unofficial mirror of guile-devel@gnu.org 
 help / color / mirror / Atom feed
From: No Itisnt <theseaisinhere@gmail.com>
To: guile-devel <guile-devel@gnu.org>
Subject: Re: Custom printers for SRFI-9 records
Date: Tue, 25 May 2010 23:18:36 -0500	[thread overview]
Message-ID: <AANLkTikW--WRMvpnRIz3BxD1v06rAD1lUSQC7wpz6Kcz@mail.gmail.com> (raw)
In-Reply-To: <AANLkTilzb959cEaRDcpFUntPK_r0q_9RsIE5pByG4QPm@mail.gmail.com>

[-- Attachment #1: Type: text/plain, Size: 790 bytes --]

On Tue, May 25, 2010 at 3:56 PM, No Itisnt <theseaisinhere@gmail.com> wrote:
> I agree. Here's a patch that adds (srfi srfi-9 gnu) with
> set-record-printer! and adds a subsection to the SRFI-9 part of the
> manual for it.
> I can go ahead and commit it, if that's OK.
>
> On Tue, May 25, 2010 at 2:23 PM, Ludovic Courtès <ludo@gnu.org> wrote:
>> Hello!
>>
>> No Itisnt <theseaisinhere@gmail.com> writes:
>>
>>> One thing I'm missing, and maybe I just didn't see it, is a way to
>>> define custom printers for SRFI-9 records.
>>
>> I agree that it’s generally useful, but I think SRFI modules should not
>> diverge from the spec, or when they do, make it separate, as was done
>> with (srfi srfi-4 gnu).
>>
>> What do you think?
>>
>> Thanks,
>> Ludo’.
>>
>>
>>
>

[-- Attachment #2: define-record-printer.patch --]
[-- Type: application/octet-stream, Size: 2631 bytes --]

diff --git a/doc/ref/srfi-modules.texi b/doc/ref/srfi-modules.texi
index 0d192fa..b3f9946 100644
--- a/doc/ref/srfi-modules.texi
+++ b/doc/ref/srfi-modules.texi
@@ -1922,6 +1922,35 @@ The functions created by @code{define-record-type} are ordinary
 top-level @code{define}s.  They can be redefined or @code{set!} as
 desired, exported from a module, etc.
 
+@menu
+* SRFI-9 Custom printers::      Customizing print behavior.
+@end menu
+
+@node SRFI-9 Custom printers
+@subsubsection Custom printers
+@cindex record printer
+
+You may use @code{set-record-printer!} to customize the default printing
+behavior of records. This is a GUILE extension and is not part of SRFI-9. It is
+located in the @nicode{(srfi srfi-9 gnu)} module.
+
+@deffn {library syntax} set-record-printer! name thunk
+Where @var{type} corresponds to the first argument of @code{define-record-type},
+and @var{thunk} is a procedure accepting two arguments, the record to print, and
+an output port.
+
+@end deffn
+
+@noindent
+This example prints the employee's name in brackets, for instance ``@code{[Fred]}''.
+
+@example
+(set-record-printer! employee-type
+  (lambda (record port)
+    (write-char #\[ port)
+    (display (get-employee-name record) port)
+    (write-char #\] port)))
+@end example
 
 @node SRFI-10
 @subsection SRFI-10 - Hash-Comma Reader Extension
diff --git a/module/srfi/srfi-9/gnu.scm b/module/srfi/srfi-9/gnu.scm
new file mode 100644
index 0000000..3a37471
--- /dev/null
+++ b/module/srfi/srfi-9/gnu.scm
@@ -0,0 +1,29 @@
+;;; Extensions to SRFI-9
+
+;; 	Copyright (C) 2010 Free Software Foundation, Inc.
+;;
+;; This library is free software; you can redistribute it and/or
+;; modify it under the terms of the GNU Lesser General Public
+;; License as published by the Free Software Foundation; either
+;; version 3 of the License, or (at your option) any later version.
+;; 
+;; This library is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+;; Lesser General Public License for more details.
+;; 
+;; You should have received a copy of the GNU Lesser General Public
+;; License along with this library; if not, write to the Free Software
+;; Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+;;; Commentary:
+
+;; Extensions to SRFI-9. Fully documented in the Guile Reference Manual.
+
+;;; Code:
+
+(define-module (srfi srfi-9 gnu)
+  #:export (set-record-printer!))
+
+(define (set-record-printer! type thunk)
+  (struct-set! type vtable-index-printer thunk))

  parent reply	other threads:[~2010-05-26  4:18 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-05-25  0:26 Custom printers for SRFI-9 records No Itisnt
2010-05-25 19:23 ` Ludovic Courtès
     [not found]   ` <AANLkTilzb959cEaRDcpFUntPK_r0q_9RsIE5pByG4QPm@mail.gmail.com>
2010-05-26  4:18     ` No Itisnt [this message]
2010-05-26 21:09       ` No Itisnt
2010-05-26 22:04         ` Ludovic Courtès
2010-05-26 22:42         ` Ludovic Courtès
2010-05-26 22:34       ` Ludovic Courtès
2010-05-27  2:41         ` No Itisnt
2010-05-27  8:20           ` Ludovic Courtès

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://www.gnu.org/software/guile/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=AANLkTikW--WRMvpnRIz3BxD1v06rAD1lUSQC7wpz6Kcz@mail.gmail.com \
    --to=theseaisinhere@gmail.com \
    --cc=guile-devel@gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).