emacs-elpa-diffs
[Top][All Lists]
Advanced

[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



reply via email to

[Prev in Thread] Current Thread [Next in Thread]