blob: 2ef230c316dcf9329ac8db1c8f3e0aed11649beb (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
(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 ptrn = val rest ...)
(match val
(ptrn (do rest ...))))
((_ ptrn <- val rest ...)
(>>= val (match-lambda (ptrn (do rest ...)))))
((_ a) a)
((_ token rest ...)
(>> token (do rest ...)))))
|