aboutsummaryrefslogtreecommitdiff
path: root/control/monad.scm
blob: 8bc46bf929de23431928450bfd52088b60a2cbc4 (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 ...)
     (begin token (do rest ...)))))