aboutsummaryrefslogtreecommitdiff
path: root/control/monad.scm
blob: f51289d42fe3bf7a1234d84c62424d47adb97ec0 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
(define-module (control monad)
  #:use-module (control monad procedures)
  #: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 ...))))
    ((_ a) a)
    ((_ token rest ...)
     (>> token (do rest ...)))))