aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--control/monad.scm10
1 files changed, 6 insertions, 4 deletions
diff --git a/control/monad.scm b/control/monad.scm
index f51289d..2ef230c 100644
--- a/control/monad.scm
+++ b/control/monad.scm
@@ -1,14 +1,16 @@
(define-module (control monad)
#:use-module (control monad procedures)
+ #:use-module (ice-9 match)
#:export (do)
#:re-export (>> >>=))
(define-syntax do
(syntax-rules (<- let =)
- ((_ let var = val rest ...)
- (let ((var val)) (do rest ...)))
- ((_ var <- val rest ...)
- (>>= val (lambda (var) (do rest ...))))
+ ((_ let ptrn = val rest ...)
+ (match val
+ (ptrn (do rest ...))))
+ ((_ ptrn <- val rest ...)
+ (>>= val (match-lambda (ptrn (do rest ...)))))
((_ a) a)
((_ token rest ...)
(>> token (do rest ...)))))