]> git.jsancho.org Git - gacela.git/blobdiff - src/utils.scm
Controllers list for views
[gacela.git] / src / utils.scm
index 33b245ff153c300affe7f2819d5968a9135a690f..d63a51148f2a8f590ae1e2a545abc8dc49d5dd16 100644 (file)
@@ -18,7 +18,9 @@
 (define-module (gacela utils)
   #:export (use-cache-with
            arguments-calling
-           arguments-apply))
+           arguments-apply
+           bound?
+           make-producer))
 
 
 ;;; Cache for procedures
            (optional-arguments-apply args values)
            (keyword-arguments-apply args values)
            (rest-arguments-apply args values))))
+
+
+;;; Continuations and coroutines
+
+(define (make-producer body)
+  (define resume #f)
+  (lambda (real-send)
+    (define send-to real-send)
+    (define (send value-to-send)
+      (set! send-to
+           (call/cc
+            (lambda (k)
+              (set! resume k)
+              (send-to value-to-send)))))
+    (if resume
+        (resume real-send)
+        (body send))))