summary refs log tree commit diff
path: root/mew.scm
diff options
context:
space:
mode:
Diffstat (limited to 'mew.scm')
-rw-r--r--mew.scm24
1 files changed, 23 insertions, 1 deletions
diff --git a/mew.scm b/mew.scm
index 4caebd1..524c10c 100644
--- a/mew.scm
+++ b/mew.scm
@@ -27,7 +27,7 @@
      -> fun-> fun->> set->
      =? <>?
      ~?
-     => =>* and=> set=>
+     => =>* and=> fun=> op=> set=>
 
      generic-make-accumulator)
 
@@ -975,6 +975,28 @@
              (and result
                   (apply and=> result (cdr fs)))))))
 
+  (define-syntax fun=>-inner
+    (syntax-rules ()
+      ((_ (acc ...))
+       (compose acc ...))
+      ((_ (acc ...) ,arg args ...)
+       (fun=>-inner (arg acc ...) args ...))
+      ((_ (acc ...) (arg ...) args ...)
+       (fun=>-inner ((op arg ...) acc ...) args ...))
+      ((_ (acc ...) arg args ...)
+       (fun=>-inner (arg acc ...) args ...))
+      ))
+
+  (define-syntax fun=>
+    (syntax-rules ()
+      ((fun=> . args)
+       (fun=>-inner () . args))))
+
+  (define-syntax op=>
+    (syntax-rules (_)
+      ((op=> init . args)
+       ((fun=> . args) init))))
+
   (define-syntax proj
     (er-macro-transformer
       (lambda (expr rename compare)