diff options
Diffstat (limited to 'mew.scm')
-rw-r--r-- | mew.scm | 24 |
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) |