aboutsummaryrefslogtreecommitdiff
path: root/control/monad/procedures.scm
blob: 701f8719aa285ef93b563c1012403b80222aa4bd (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
(define-module (control monad procedures)
  #:use-module (oop goops)
  #:use-module (srfi srfi-1)            ; concatenate!
  #:export (>>=))

(define-generic >>=)

(define-method (>>= (this <null>)
                    proc)
  '())
(define-method (>>= (this <pair>)
                    (proc <procedure>))
  (concatenate! (map proc this)))

;; bind :: Monad m => m a -> (a -> m b) -> m b
;; return :: Monad m => a -> m a
;; map :: Functor f => (a -> b) -> f a -> f b