From 34569bd7811b553c93c4351dbd117b1548f17ca7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hugo=20H=C3=B6rnquist?= Date: Fri, 16 Nov 2018 00:05:56 +0100 Subject: Made do notation support pattern matching. --- control/monad.scm | 10 ++++++---- 1 file 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 ...))))) -- cgit v1.2.3