[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] master d78b6bf 3/3: Merge commit '4840be0f3a82f49157239014a09c700
From: |
Thierry Volpiatto |
Subject: |
[elpa] master d78b6bf 3/3: Merge commit '4840be0f3a82f49157239014a09c7001b7816316' |
Date: |
Tue, 1 Nov 2016 07:29:18 +0000 (UTC) |
branch: master
commit d78b6bf941911ba2517bb893cd946a08e3a828f6
Merge: 72ef2b1 4840be0
Author: Thierry Volpiatto <address@hidden>
Commit: Thierry Volpiatto <address@hidden>
Merge commit '4840be0f3a82f49157239014a09c7001b7816316'
---
packages/async/async.el | 28 ++++++++++++++++++++++++++++
1 file changed, 28 insertions(+)
diff --git a/packages/async/async.el b/packages/async/async.el
index 6619fff..7b875ac 100644
--- a/packages/async/async.el
+++ b/packages/async/async.el
@@ -298,6 +298,34 @@ returns nil. It can still be useful, however, as an
argument to
"Evaluate FUNC in a separate Emacs process, synchronously."
`(async-get (async-start ,func)))
+(defun async--fold-left (f z xs)
+ (let ((res z))
+ (dolist (x xs)
+ (setq res (funcall f res x)))
+ res))
+
+(defmacro async-let (bindings forms)
+ "Implements `let', but each binding is established asynchronously.
+For example:
+
+ (async-let ((x (foo))
+ (y (bar)))
+ (message \"%s %s\" x y))
+
+ expands to ==>
+
+ (async-start (foo)
+ (lambda (x)
+ (async-start (bar)
+ (lambda (y)
+ (message \"%s %s\" x y)))))"
+ (async--fold-left
+ (lambda (acc binding)
+ `(async-start ,(cadr binding)
+ (lambda (,(car binding))
+ ,acc)))
+ forms (reverse bindings)))
+
(provide 'async)
;;; async.el ends here