Commit d9236c26 authored by's avatar

Further documentation about mdo, suggested by Benjamin Franksen

parent a8312580
......@@ -769,7 +769,7 @@ Furthermore, the Control.Monad.ST and Control.Monad.ST.Lazy modules provide the
for Haskell's internal state monad (strict and lazy, respectively).
There are three important points in using the recursive-do notation:
Here are some important points in using the recursive-do notation:
The recursive version of the do-notation uses the keyword <literal>mdo</literal> (rather
......@@ -777,7 +777,21 @@ than <literal>do</literal>).
As with other extensions, ghc should be given the flag <literal>-fglasgow-exts</literal>
It is enabled with the flag <literal>-XRecursiveDo</literal>, which is in turn implied by
Unlike ordinary do-notation, but like <literal>let</literal> and <literal>where</literal> bindings,
name shadowing is not allowed; that is, all the names bound in a single <literal>mdo</literal> must
be distinct (Section 3.3 of the paper).
Variables bound by a <literal>let</literal> statement in an <literal>mdo</literal>
are monomorphic in the <literal>mdo</literal> (Section 3.1 of the paper). However
GHC breaks the <literal>mdo</literal> into segments to enhance polymorphism,
and improve termination (Section 3.2 of the paper).
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment