X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=ghc%2Fdocs%2Fusers_guide%2Fglasgow_exts.sgml;h=d4a39bef56ca1f188bd3d36657347524cc4f8855;hb=7b398a32ad0e56d07bbf1feb653e3eda123dc9b2;hp=bcc7d1ea8e6eea0f09a5be4c35aba1030b775dc4;hpb=e982249359ca541e85a55cff28d98b656e487e51;p=ghc-hetmet.git
diff --git a/ghc/docs/users_guide/glasgow_exts.sgml b/ghc/docs/users_guide/glasgow_exts.sgml
index bcc7d1e..d4a39be 100644
--- a/ghc/docs/users_guide/glasgow_exts.sgml
+++ b/ghc/docs/users_guide/glasgow_exts.sgml
@@ -2628,6 +2628,91 @@ qualifier list has just one element, a boolean expression.
+
+
+
+The recursive do-notation
+
+
+ The recursive do-notation (also known as mdo-notation) is implemented as described in
+"A recursive do for Haskell",
+Levent Erkok, John Launchbury",
+Haskell Workshop 2002, pages: 29-37. Pittsburgh, Pennsylvania.
+
+
+The do-notation of Haskell does not allow recursive bindings,
+that is, the variables bound in a do-expression are visible only in the textually following
+code block. Compare this to a let-expression, where bound variables are visible in the entire binding
+group. It turns out that several applications can benefit from recursive bindings in
+the do-notation, and this extension provides the necessary syntactic support.
+
+
+Here is a simple (yet contrived) example:
+
+
+justOnes = mdo xs <- Just (1:xs)
+ return xs
+
+
+As you can guess justOnes will evaluate to Just [1,1,1,....
+
+
+
+The MonadFix library introduces the MonadFix class. It's definition is:
+
+
+class Monad m => MonadFix m where
+ mfix :: (a -> m a) -> m a
+
+
+The function mfix
+dictates how the required recursion operation should be performed. If recursive bindings are required for a monad,
+then that monad must be declared an instance of the MonadFix class.
+For details, see the above mentioned reference.
+
+
+The MonadFix library automatically declares List, Maybe, IO, and
+state monads (both lazy and strict) as instances of the MonadFix class.
+
+
+There are three important points in using the recursive-do notation:
+
+
+The recursive version of the do-notation uses the keyword mdo (rather
+than do).
+
+
+
+If you want to declare an instance of the MonadFix class for one of
+your own monads, or you need to refer to the class name MonadFix in any other way (for instance in
+writing a type constraint), then your program should import Control.Monad.MonadFix.
+Otherwise, you don't need to import any special libraries to use the mdo-notation. That is,
+as long as you only use the predefined instances mentioned above, the mdo-notation will
+be automatically available. (Note: This differs from the Hugs implementation, where
+MonadFix should always be imported.)
+
+
+
+As with other extensions, ghc should be given the flag -fglasgow-exts
+
+
+
+
+
+Historical note: The originial implementation of the mdo-notation, and most
+of the existing documents, use the names
+MonadRec for the class, and
+Control.Monad.MonadRec for the library. These names
+are no longer supported.
+
+
+
+The web page: http://www.cse.ogi.edu/PacSoft/projects/rmb
+contains up to date information on recursive monadic bindings.
+
+
+
+
@@ -4025,73 +4110,6 @@ instances is most interesting.
-
-The recursive do-notation
-
-
- The recursive do-notation (a.k.a. mdo-notation) is implemented as described in
-"A recursive do for Haskell",
-Levent Erkok, John Launchbury",
-Haskell Workshop 2002, pages: 29-37. Pittsburgh, Pennsylvania.
-
-
-The do-notation of Haskell does not allow recursive bindings,
-that is, the variables bound in a do-expression are visible only in the textually following
-code block. Compare this to a let-expression, where bound variables are visible in the entire binding
-group. It turns out that several applications can benefit from recursive bindings in
-the do-notation, and this extension provides the necessary syntactic support.
-
-
-Here is a simple (yet contrived) example:
-
-
-import Control.Monad.MonadRec
-
-justOnes = mdo xs <- Just (1:xs)
- return xs
-
-
-There are three important points in using the recursive-do notation:
-
-
-The recursive version of the do-notation uses the keyword mdo (rather
-than do).
-
-
-
-The scripts using mdo should import Control.Monad.MonadRec
-
-
-
-As with other extensions, ghc should be given the flag -fglasgow-exts
-
-
-
-
-
-The MonadRec library introduces the MonadRec class. It's definition is:
-
-
-class Monad m => MonadRec m where
- mfix :: (a -> m a) -> m a
-
-
-The MonadRec class declares the function mfix,
-which dictates how the recursion should behave. If recursive bindings are required for a monad,
-then that monad must be declared an instance of the MonadRec class.
-For details, see the above mentione reference.
-
-
-The MonadRec library automatically declares List, Maybe, IO, and
-state monads (both lazy and strict) as instances of the MonadRec class.
-
-
-
-The web page: http://www.cse.ogi.edu/PacSoft/projects/rmb
-contains up to date information on recursive monadic bindings.
-
-
-