diff options
author | Ludovic Courtès <ludo@gnu.org> | 2015-06-08 22:49:50 +0200 |
---|---|---|
committer | Ludovic Courtès <ludo@gnu.org> | 2015-06-08 23:00:49 +0200 |
commit | 751630c9c3f7f3e87dfccc5f5ba8cf61cdd6f8fd (patch) | |
tree | 2da2fcf7e6e300c98f2777e0bcb5670252ff4803 /doc | |
parent | ae9b96c7846cc7d4528da5c6d861d6440cf46e33 (diff) | |
download | patches-751630c9c3f7f3e87dfccc5f5ba8cf61cdd6f8fd.tar patches-751630c9c3f7f3e87dfccc5f5ba8cf61cdd6f8fd.tar.gz |
monads: Allow n-ary '>>=' expressions.
Suggested by Federico Beffa <beffa@fbengineering.ch>.
* guix/monads.scm (bind-syntax): New macro.
(with-monad): Use it instead of 'identifier-syntax'.
* tests/monads.scm (">>= with more than two arguments"): New test.
* doc/guix.texi (The Store Monad): Explain that there can be several MPROC.
Add an example.
Diffstat (limited to 'doc')
-rw-r--r-- | doc/guix.texi | 23 |
1 files changed, 18 insertions, 5 deletions
diff --git a/doc/guix.texi b/doc/guix.texi index bcfa52d5b1..85ccd4057e 100644 --- a/doc/guix.texi +++ b/doc/guix.texi @@ -2773,12 +2773,25 @@ in @var{monad}. Return a monadic value that encapsulates @var{val}. @end deffn -@deffn {Scheme Syntax} >>= @var{mval} @var{mproc} +@deffn {Scheme Syntax} >>= @var{mval} @var{mproc} ... @dfn{Bind} monadic value @var{mval}, passing its ``contents'' to monadic -procedure @var{mproc}@footnote{This operation is commonly referred to as -``bind'', but that name denotes an unrelated procedure in Guile. Thus -we use this somewhat cryptic symbol inherited from the Haskell -language.}. +procedures @var{mproc}@dots{}@footnote{This operation is commonly +referred to as ``bind'', but that name denotes an unrelated procedure in +Guile. Thus we use this somewhat cryptic symbol inherited from the +Haskell language.}. There can be one @var{mproc} or several of them, as +in this example: + +@example +(run-with-state + (with-monad %state-monad + (>>= (return 1) + (lambda (x) (return (+ 1 x))) + (lambda (x) (return (* 2 x))))) + 'some-state) + +@result{} 4 +@result{} some-state +@end example @end deffn @deffn {Scheme Syntax} mlet @var{monad} ((@var{var} @var{mval}) ...) @ |