From 5a813a63a3d03dd62d5167df11700e7c613b63f3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hugo=20H=C3=B6rnquist?= Date: Sat, 16 Jul 2022 23:42:50 +0200 Subject: Add (hnh util values). --- module/hnh/util/values.scm | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 module/hnh/util/values.scm diff --git a/module/hnh/util/values.scm b/module/hnh/util/values.scm new file mode 100644 index 00000000..79f06cff --- /dev/null +++ b/module/hnh/util/values.scm @@ -0,0 +1,27 @@ +(define-module (hnh util values) + :use-module (ice-9 control) + :export (abort* on-fst on-snd apply/values) + ) + + +(define-syntax-rule (abort* form) + (call-with-values (lambda () form) abort)) + + +;; (on-fst (+ 2 (abort* (values 3 4)))) +;; ⇒ 5 ⇒ 4 + +(define-syntax-rule (on-fst form) + (% form + (lambda (prompt fst . rest) + (apply values (prompt fst) rest)))) + +(define-syntax-rule (on-snd form) + (% form + (lambda (prompt fst snd . rest) + (apply values fst (prompt snd) rest)))) + + +(define-syntax-rule (apply/values proc form) + (call-with-values (lambda () form) + proc)) -- cgit v1.2.3