~ruther/guix-local

8bc2183fe54487793e9eb6b39ba01329671840b9 — Chris Marusich 9 years ago 60a9fcb
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>
2 files changed, 14 insertions(+), 5 deletions(-)

M doc/guix.texi
M guix/monads.scm
M doc/guix.texi => doc/guix.texi +11 -3
@@ 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

M guix/monads.scm => guix/monads.scm +3 -2
@@ 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 ...)