diff options
Diffstat (limited to 'control/monad/procedures.scm')
-rw-r--r-- | control/monad/procedures.scm | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/control/monad/procedures.scm b/control/monad/procedures.scm new file mode 100644 index 0000000..701f871 --- /dev/null +++ b/control/monad/procedures.scm @@ -0,0 +1,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 |