summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChris K. Jester-Young <cky944@gmail.com>2013-04-07 12:43:17 -0400
committerChris K. Jester-Young <cky944@gmail.com>2013-04-07 12:43:17 -0400
commit3ed8d953f8d0da8ed82fe939ce48a563d7abe19b (patch)
tree668f1efd31e5719d33730024df7f54f802701b3d
parent7f6c3f8f0012e916469fa6c50b44c621ebdc89ac (diff)
downloadguile-3ed8d953f8d0da8ed82fe939ce48a563d7abe19b.tar.gz
Add record type printer for srfi-45.
* module/srfi/srfi-45.scm: Add record type printer for promises. (promise-visit): New helper for visiting lazy promises.
-rw-r--r--module/srfi/srfi-45.scm17
1 files changed, 16 insertions, 1 deletions
diff --git a/module/srfi/srfi-45.scm b/module/srfi/srfi-45.scm
index 51947700c..6f7ba7e04 100644
--- a/module/srfi/srfi-45.scm
+++ b/module/srfi/srfi-45.scm
@@ -39,7 +39,8 @@
eager
promise?)
#:replace (delay force promise?)
- #:use-module (srfi srfi-9))
+ #:use-module (srfi srfi-9)
+ #:use-module (srfi srfi-9 gnu))
(cond-expand-provide (current-module) '(srfi-45))
@@ -76,3 +77,17 @@
;; (*) These two lines re-fetch and check the original promise in case
;; the first line of the let* caused it to be forced. For an example
;; where this happens, see reentrancy test 3 below.
+
+(define* (promise-visit promise #:key on-eager on-lazy)
+ (define content (promise-val promise))
+ (case (value-tag content)
+ ((eager) (on-eager (value-proc content)))
+ ((lazy) (on-lazy (value-proc content)))))
+
+(set-record-type-printer! promise
+ (lambda (promise port)
+ (promise-visit promise
+ #:on-eager (lambda (value)
+ (format port "#<promise = ~s>" value))
+ #:on-lazy (lambda (proc)
+ (format port "#<promise => ~s>" proc)))))