diff options
author | Chris K. Jester-Young <cky944@gmail.com> | 2013-04-07 12:43:17 -0400 |
---|---|---|
committer | Chris K. Jester-Young <cky944@gmail.com> | 2013-04-07 12:43:17 -0400 |
commit | 3ed8d953f8d0da8ed82fe939ce48a563d7abe19b (patch) | |
tree | 668f1efd31e5719d33730024df7f54f802701b3d /module/srfi/srfi-45.scm | |
parent | 7f6c3f8f0012e916469fa6c50b44c621ebdc89ac (diff) | |
download | guile-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.
Diffstat (limited to 'module/srfi/srfi-45.scm')
-rw-r--r-- | module/srfi/srfi-45.scm | 17 |
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))))) |