From a0ed10aa2a780894c8f63bd4bde218d56eba411e Mon Sep 17 00:00:00 2001 From: Masaya Tojo Date: Sun, 16 Jun 2024 12:13:30 +0900 Subject: Add let-values to `do` syntax --- algebraic-structures.monad.scm | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/algebraic-structures.monad.scm b/algebraic-structures.monad.scm index 80bde36..dd9b850 100644 --- a/algebraic-structures.monad.scm +++ b/algebraic-structures.monad.scm @@ -7,7 +7,7 @@ M) (import-for-syntax matchable (chicken syntax) - (only (srfi 1) last)) + (only (srfi 1) every last)) (define-syntax do (ir-macro-transformer @@ -27,6 +27,12 @@ (symbol? let-stx) (compare let-stx (inject 'let)) (symbol? =-stx) (compare =-stx (inject '=))) `((lambda (,var) ,acc) ,expr)) + ((and (list? var) + (every symbol? var) + (symbol? let-stx) (compare let-stx (inject 'let-values)) + (symbol? =-stx) (compare =-stx (inject '=))) + `(call-with-values (lambda () ,expr) + (lambda ,var ,acc))) (else `(>>= ,binding (lambda (_) ,acc))))] [expr -- cgit v1.2.3