# HG changeset patch # User Adam Chlipala # Date 1314188289 14400 # Node ID 76dab73304a56a2b312d6e98c22d3dbf845d2e43 # Parent 553a5cc3a4b5a6a64e5afb935b163279a48ce877 Document monadic shorthands diff -r 553a5cc3a4b5 -r 76dab73304a5 doc/manual.tex --- a/doc/manual.tex Sun Aug 21 13:41:57 2011 -0400 +++ b/doc/manual.tex Wed Aug 24 08:18:09 2011 -0400 @@ -1389,6 +1389,8 @@ \hspace{.1in} \to \mt{monad} \; \mt{m} \end{array}$$ +The Ur/Web compiler provides syntactic sugar for monads, similar to Haskell's \cd{do} notation. An expression $x \leftarrow e_1; e_2$ is desugarded to $\mt{bind} \; e_1 \; (\lambda x \Rightarrow e_2)$, and an expression $e_1; e_2$ is desugared to $\mt{bind} \; e_1 \; (\lambda () \Rightarrow e_2)$. + \subsection{Transactions} Ur is a pure language; we use Haskell's trick to support controlled side effects. The standard library defines a monad $\mt{transaction}$, meant to stand for actions that may be undone cleanly. By design, no other kinds of actions are supported.