aboutsummaryrefslogtreecommitdiff
path: root/module/util.scm
diff options
context:
space:
mode:
Diffstat (limited to 'module/util.scm')
-rw-r--r--module/util.scm12
1 files changed, 11 insertions, 1 deletions
diff --git a/module/util.scm b/module/util.scm
index 89f6dab6..707cba90 100644
--- a/module/util.scm
+++ b/module/util.scm
@@ -11,7 +11,7 @@
quote?
re-export-modules
use-modules*
- -> set
+ -> set aif
tree-map let-lazy)
#:replace (let* set! define-syntax
when unless if))
@@ -44,6 +44,13 @@
((@ (guile) if) p t
(begin f ...))]))
+(define-syntax aif
+ (lambda (stx)
+ (syntax-case stx ()
+ [(_ condition true-clause false-clause)
+ (with-syntax ((it (datum->syntax stx 'it)))
+ #'(let ((it condition))
+ (if it true-clause false-clause)))])))
(define-public upstring->symbol (compose string->symbol string-upcase))
@@ -356,6 +363,9 @@
(-> (func obj) rest ...)]))
+;; Non-destructive set, syntax extension from set-fields from (srfi
+;; srfi-9 gnu). Also doubles as a non-destructive mod!, if the `='
+;; operator is used.
(define-syntax set
(syntax-rules (=)
[(set (acc obj) value)