monads: Improve mlet, mlet*, and mbegin documentation.

* doc/guix.texi (The Store Monad) <mlet, mlet*, mbegin>: Clarify
their intended usage.
* guix/monads.scm (mbegin): Update docstring accordingly.

Signed-off-by: Ludovic Courtès <ludo@gnu.org>
master
Chris Marusich 2017-04-06 02:28:36 -07:00 committed by Ludovic Courtès
parent 60a9fcb137
commit 8bc2183fe5
No known key found for this signature in database
GPG Key ID: 090B11993D9AEBB5
2 changed files with 14 additions and 5 deletions

View File

@ -4038,8 +4038,15 @@ in this example:
@deffnx {Scheme Syntax} mlet* @var{monad} ((@var{var} @var{mval}) ...) @
@var{body} ...
Bind the variables @var{var} to the monadic values @var{mval} in
@var{body}. The form (@var{var} -> @var{val}) binds @var{var} to the
``normal'' value @var{val}, as per @code{let}.
@var{body}, which is a sequence of expressions. As with the bind
operator, this can be thought of as ``unpacking'' the raw, non-monadic
value ``contained'' in @var{mval} and making @var{var} refer to that
raw, non-monadic value within the scope of the @var{body}. The form
(@var{var} -> @var{val}) binds @var{var} to the ``normal'' value
@var{val}, as per @code{let}. The binding operations occur in sequence
from left to right. The last expression of @var{body} must be a monadic
expression, and its result will become the result of the @code{mlet} or
@code{mlet*} when run in the @var{monad}.
@code{mlet*} is to @code{mlet} what @code{let*} is to @code{let}
(@pxref{Local Bindings,,, guile, GNU Guile Reference Manual}).
@ -4047,7 +4054,8 @@ Bind the variables @var{var} to the monadic values @var{mval} in
@deffn {Scheme System} mbegin @var{monad} @var{mexp} ...
Bind @var{mexp} and the following monadic expressions in sequence,
returning the result of the last expression.
returning the result of the last expression. Every expression in the
sequence must be a monadic expression.
This is akin to @code{mlet}, except that the return values of the
monadic expressions are ignored. In that sense, it is analogous to

View File

@ -185,8 +185,9 @@ form is (VAR -> VAL), bind VAR to the non-monadic value VAL in the same way as
(define-syntax mbegin
(syntax-rules (%current-monad)
"Bind the given monadic expressions in sequence, returning the result of
the last one."
"Bind MEXP and the following monadic expressions in sequence, returning
the result of the last expression. Every expression in the sequence must be a
monadic expression."
((_ %current-monad mexp)
mexp)
((_ %current-monad mexp rest ...)