diff options
Diffstat (limited to 'module/util.scm')
-rw-r--r-- | module/util.scm | 16 |
1 files changed, 15 insertions, 1 deletions
diff --git a/module/util.scm b/module/util.scm index 707cba90..0d4d20d6 100644 --- a/module/util.scm +++ b/module/util.scm @@ -12,7 +12,7 @@ re-export-modules use-modules* -> set aif - tree-map let-lazy) + tree-map let-lazy let-env) #:replace (let* set! define-syntax when unless if)) @@ -374,3 +374,17 @@ [(set (acc obj) = (op rest ...)) (set-fields obj ((acc) (op (acc obj) rest ...)))])) + + + +;; TODO multiple values +(define-syntax let-env + (syntax-rules () + [(_ ((name value)) + body ...) + (let ((sname (symbol->string (quote name)))) + (let ((ogenv (getenv sname))) + (setenv sname value) + (let ((return (begin body ...))) + (setenv sname ogenv) + return)))])) |