Sophie

Sophie

distrib > Fedora > 14 > x86_64 > by-pkgid > da2ed07af0cf0f424d74f4cc6829a27c > files > 1006

ghc-ghc-devel-6.12.3-8.6.fc14.i686.rpm

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!--Rendered using the Haskell Html Library v0.2-->
<HTML
><HEAD
><META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8"
><TITLE
>MonadUtils</TITLE
><LINK HREF="haddock.css" REL="stylesheet" TYPE="text/css"
><SCRIPT SRC="haddock-util.js" TYPE="text/javascript"
></SCRIPT
><SCRIPT TYPE="text/javascript"
>window.onload = function () {setSynopsis("mini_MonadUtils.html")};</SCRIPT
></HEAD
><BODY
><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
><TR
><TD CLASS="topbar"
><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
><TR
><TD
><IMG SRC="haskell_icon.gif" WIDTH="16" HEIGHT="16" ALT=" "
></TD
><TD CLASS="title"
>ghc-6.12.3: The GHC API</TD
><TD CLASS="topbut"
><A HREF="index.html"
>Contents</A
></TD
><TD CLASS="topbut"
><A HREF="doc-index.html"
>Index</A
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="modulebar"
><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
><TR
><TD
><FONT SIZE="6"
>MonadUtils</FONT
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="section1"
>Description</TD
></TR
><TR
><TD CLASS="doc"
>Utilities related to Monad and Applicative classes
   Mostly for backwards compatability.
</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="section1"
>Synopsis</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="body"
><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
><TR
><TD CLASS="decl"
><SPAN CLASS="keyword"
>class</SPAN
> <A HREF="../base-4.2.0.2/Control-Monad.html#t%3AFunctor"
>Functor</A
> f =&gt; <A HREF="#t%3AApplicative"
>Applicative</A
> f  <SPAN CLASS="keyword"
>where</SPAN
></TD
></TR
><TR
><TD CLASS="body"
><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
><TR
><TD CLASS="decl"
><A HREF="#v%3Apure"
>pure</A
> ::  a -&gt; f a</TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3A%3C%2A%3E"
>(&lt;*&gt;)</A
> ::  f (a -&gt; b) -&gt; f a -&gt; f b</TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3A%2A%3E"
>(*&gt;)</A
> ::  f a -&gt; f b -&gt; f b</TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3A%3C%2A"
>(&lt;*)</A
> ::  f a -&gt; f b -&gt; f a</TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3A%3C%24%3E"
>(&lt;$&gt;)</A
> :: <A HREF="../base-4.2.0.2/Control-Monad.html#t%3AFunctor"
>Functor</A
> f =&gt; (a -&gt; b) -&gt; f a -&gt; f b</TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><SPAN CLASS="keyword"
>class</SPAN
> <A HREF="../base-4.2.0.2/Control-Monad.html#t%3AMonad"
>Monad</A
> m =&gt; <A HREF="#t%3AMonadFix"
>MonadFix</A
> m  <SPAN CLASS="keyword"
>where</SPAN
></TD
></TR
><TR
><TD CLASS="body"
><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
><TR
><TD CLASS="decl"
><A HREF="#v%3Amfix"
>mfix</A
> ::  (a -&gt; m a) -&gt; m a</TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><SPAN CLASS="keyword"
>class</SPAN
> <A HREF="../base-4.2.0.2/Control-Monad.html#t%3AMonad"
>Monad</A
> m =&gt; <A HREF="#t%3AMonadIO"
>MonadIO</A
> m  <SPAN CLASS="keyword"
>where</SPAN
></TD
></TR
><TR
><TD CLASS="body"
><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
><TR
><TD CLASS="decl"
><A HREF="#v%3AliftIO"
>liftIO</A
> ::  <A HREF="../base-4.2.0.2/System-IO.html#t%3AIO"
>IO</A
> a -&gt; m a</TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3AliftIO1"
>liftIO1</A
> :: <A HREF="MonadUtils.html#t%3AMonadIO"
>MonadIO</A
> m =&gt; (a -&gt; <A HREF="../base-4.2.0.2/System-IO.html#t%3AIO"
>IO</A
> b) -&gt; a -&gt; m b</TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3AliftIO2"
>liftIO2</A
> :: <A HREF="MonadUtils.html#t%3AMonadIO"
>MonadIO</A
> m =&gt; (a -&gt; b -&gt; <A HREF="../base-4.2.0.2/System-IO.html#t%3AIO"
>IO</A
> c) -&gt; a -&gt; b -&gt; m c</TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3AliftIO3"
>liftIO3</A
> :: <A HREF="MonadUtils.html#t%3AMonadIO"
>MonadIO</A
> m =&gt; (a -&gt; b -&gt; c -&gt; <A HREF="../base-4.2.0.2/System-IO.html#t%3AIO"
>IO</A
> d) -&gt; a -&gt; b -&gt; c -&gt; m d</TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3AliftIO4"
>liftIO4</A
> :: <A HREF="MonadUtils.html#t%3AMonadIO"
>MonadIO</A
> m =&gt; (a -&gt; b -&gt; c -&gt; d -&gt; <A HREF="../base-4.2.0.2/System-IO.html#t%3AIO"
>IO</A
> e) -&gt; a -&gt; b -&gt; c -&gt; d -&gt; m e</TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3AzipWith3M"
>zipWith3M</A
> :: <A HREF="../base-4.2.0.2/Control-Monad.html#t%3AMonad"
>Monad</A
> m =&gt; (a -&gt; b -&gt; c -&gt; m d) -&gt; [a] -&gt; [b] -&gt; [c] -&gt; m [d]</TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3AmapAndUnzipM"
>mapAndUnzipM</A
> :: <A HREF="../base-4.2.0.2/Control-Monad.html#t%3AMonad"
>Monad</A
> m =&gt; (a -&gt; m (b, c)) -&gt; [a] -&gt; m ([b], [c])</TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3AmapAndUnzip3M"
>mapAndUnzip3M</A
> :: <A HREF="../base-4.2.0.2/Control-Monad.html#t%3AMonad"
>Monad</A
> m =&gt; (a -&gt; m (b, c, d)) -&gt; [a] -&gt; m ([b], [c], [d])</TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3AmapAndUnzip4M"
>mapAndUnzip4M</A
> :: <A HREF="../base-4.2.0.2/Control-Monad.html#t%3AMonad"
>Monad</A
> m =&gt; (a -&gt; m (b, c, d, e)) -&gt; [a] -&gt; m ([b], [c], [d], [e])</TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3AmapAccumLM"
>mapAccumLM</A
> :: <A HREF="../base-4.2.0.2/Control-Monad.html#t%3AMonad"
>Monad</A
> m =&gt; (acc -&gt; x -&gt; m (acc, y)) -&gt; acc -&gt; [x] -&gt; m (acc, [y])</TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3AmapSndM"
>mapSndM</A
> :: <A HREF="../base-4.2.0.2/Control-Monad.html#t%3AMonad"
>Monad</A
> m =&gt; (b -&gt; m c) -&gt; [(a, b)] -&gt; m [(a, c)]</TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3AconcatMapM"
>concatMapM</A
> :: <A HREF="../base-4.2.0.2/Control-Monad.html#t%3AMonad"
>Monad</A
> m =&gt; (a -&gt; m [b]) -&gt; [a] -&gt; m [b]</TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3AmapMaybeM"
>mapMaybeM</A
> :: <A HREF="../base-4.2.0.2/Control-Monad.html#t%3AMonad"
>Monad</A
> m =&gt; (a -&gt; m (<A HREF="../base-4.2.0.2/Data-Maybe.html#t%3AMaybe"
>Maybe</A
> b)) -&gt; [a] -&gt; m [b]</TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3AanyM"
>anyM</A
> :: <A HREF="../base-4.2.0.2/Control-Monad.html#t%3AMonad"
>Monad</A
> m =&gt; (a -&gt; m <A HREF="../base-4.2.0.2/Data-Bool.html#t%3ABool"
>Bool</A
>) -&gt; [a] -&gt; m <A HREF="../base-4.2.0.2/Data-Bool.html#t%3ABool"
>Bool</A
></TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3AallM"
>allM</A
> :: <A HREF="../base-4.2.0.2/Control-Monad.html#t%3AMonad"
>Monad</A
> m =&gt; (a -&gt; m <A HREF="../base-4.2.0.2/Data-Bool.html#t%3ABool"
>Bool</A
>) -&gt; [a] -&gt; m <A HREF="../base-4.2.0.2/Data-Bool.html#t%3ABool"
>Bool</A
></TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3AfoldlM"
>foldlM</A
> :: <A HREF="../base-4.2.0.2/Control-Monad.html#t%3AMonad"
>Monad</A
> m =&gt; (a -&gt; b -&gt; m a) -&gt; a -&gt; [b] -&gt; m a</TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3AfoldlM_"
>foldlM_</A
> :: <A HREF="../base-4.2.0.2/Control-Monad.html#t%3AMonad"
>Monad</A
> m =&gt; (a -&gt; b -&gt; m a) -&gt; a -&gt; [b] -&gt; m <A HREF="../ghc-prim-0.2.0.0/GHC-Unit.html#t%3A%28%29"
>()</A
></TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3AfoldrM"
>foldrM</A
> :: <A HREF="../base-4.2.0.2/Control-Monad.html#t%3AMonad"
>Monad</A
> m =&gt; (b -&gt; a -&gt; m a) -&gt; a -&gt; [b] -&gt; m a</TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3AmaybeMapM"
>maybeMapM</A
> :: <A HREF="../base-4.2.0.2/Control-Monad.html#t%3AMonad"
>Monad</A
> m =&gt; (a -&gt; m b) -&gt; <A HREF="../base-4.2.0.2/Data-Maybe.html#t%3AMaybe"
>Maybe</A
> a -&gt; m (<A HREF="../base-4.2.0.2/Data-Maybe.html#t%3AMaybe"
>Maybe</A
> b)</TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="section1"
>Documentation</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><SPAN CLASS="keyword"
>class</SPAN
> <A HREF="../base-4.2.0.2/Control-Monad.html#t%3AFunctor"
>Functor</A
> f =&gt; <A NAME="t:Applicative"
><A NAME="t%3AApplicative"
></A
></A
><B
>Applicative</B
> f  <SPAN CLASS="keyword"
>where</SPAN
></TD
></TR
><TR
><TD CLASS="body"
><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
><TR
><TD CLASS="ndoc"
><P
>A functor with application.
</P
><P
>Instances should satisfy the following laws:
</P
><DL
><DT
><EM
>identity</EM
></DT
><DD
>
      <TT
><TT
><A HREF="MonadUtils.html#v%3Apure"
>pure</A
></TT
> <TT
><A HREF="../base-4.2.0.2/Control-Category.html#v%3Aid"
>id</A
></TT
> <TT
><A HREF="MonadUtils.html#v%3A%3C%2A%3E"
>&lt;*&gt;</A
></TT
> v = v</TT
>
</DD
><DT
><EM
>composition</EM
></DT
><DD
>
      <TT
><TT
><A HREF="MonadUtils.html#v%3Apure"
>pure</A
></TT
> (.) <TT
><A HREF="MonadUtils.html#v%3A%3C%2A%3E"
>&lt;*&gt;</A
></TT
> u <TT
><A HREF="MonadUtils.html#v%3A%3C%2A%3E"
>&lt;*&gt;</A
></TT
> v <TT
><A HREF="MonadUtils.html#v%3A%3C%2A%3E"
>&lt;*&gt;</A
></TT
> w = u <TT
><A HREF="MonadUtils.html#v%3A%3C%2A%3E"
>&lt;*&gt;</A
></TT
> (v <TT
><A HREF="MonadUtils.html#v%3A%3C%2A%3E"
>&lt;*&gt;</A
></TT
> w)</TT
>
</DD
><DT
><EM
>homomorphism</EM
></DT
><DD
>
      <TT
><TT
><A HREF="MonadUtils.html#v%3Apure"
>pure</A
></TT
> f <TT
><A HREF="MonadUtils.html#v%3A%3C%2A%3E"
>&lt;*&gt;</A
></TT
> <TT
><A HREF="MonadUtils.html#v%3Apure"
>pure</A
></TT
> x = <TT
><A HREF="MonadUtils.html#v%3Apure"
>pure</A
></TT
> (f x)</TT
>
</DD
><DT
><EM
>interchange</EM
></DT
><DD
>
      <TT
>u <TT
><A HREF="MonadUtils.html#v%3A%3C%2A%3E"
>&lt;*&gt;</A
></TT
> <TT
><A HREF="MonadUtils.html#v%3Apure"
>pure</A
></TT
> y = <TT
><A HREF="MonadUtils.html#v%3Apure"
>pure</A
></TT
> (<TT
><A HREF="../base-4.2.0.2/Prelude.html#v%3A%24"
>$</A
></TT
> y) <TT
><A HREF="MonadUtils.html#v%3A%3C%2A%3E"
>&lt;*&gt;</A
></TT
> u</TT
>
</DD
><DT
><EM
>ignore left value</EM
></DT
><DD
>
      <TT
>u <TT
><A HREF="MonadUtils.html#v%3A%2A%3E"
>*&gt;</A
></TT
> v = <TT
><A HREF="MonadUtils.html#v%3Apure"
>pure</A
></TT
> (<TT
><A HREF="../base-4.2.0.2/Prelude.html#v%3Aconst"
>const</A
></TT
> <TT
><A HREF="../base-4.2.0.2/Control-Category.html#v%3Aid"
>id</A
></TT
>) <TT
><A HREF="MonadUtils.html#v%3A%3C%2A%3E"
>&lt;*&gt;</A
></TT
> u <TT
><A HREF="MonadUtils.html#v%3A%3C%2A%3E"
>&lt;*&gt;</A
></TT
> v</TT
>
</DD
><DT
><EM
>ignore right value</EM
></DT
><DD
>
      <TT
>u <TT
><A HREF="MonadUtils.html#v%3A%3C%2A"
>&lt;*</A
></TT
> v = <TT
><A HREF="MonadUtils.html#v%3Apure"
>pure</A
></TT
> <TT
><A HREF="../base-4.2.0.2/Prelude.html#v%3Aconst"
>const</A
></TT
> <TT
><A HREF="MonadUtils.html#v%3A%3C%2A%3E"
>&lt;*&gt;</A
></TT
> u <TT
><A HREF="MonadUtils.html#v%3A%3C%2A%3E"
>&lt;*&gt;</A
></TT
> v</TT
>
</DD
></DL
><P
>The <TT
><A HREF="../base-4.2.0.2/Control-Monad.html#t%3AFunctor"
>Functor</A
></TT
> instance should satisfy
</P
><TT
>
      <TT
><A HREF="../base-4.2.0.2/Control-Monad.html#v%3Afmap"
>fmap</A
></TT
> f x = <TT
><A HREF="MonadUtils.html#v%3Apure"
>pure</A
></TT
> f <TT
><A HREF="MonadUtils.html#v%3A%3C%2A%3E"
>&lt;*&gt;</A
></TT
> x
</TT
><P
>If <TT
>f</TT
> is also a <TT
><A HREF="../base-4.2.0.2/Control-Monad.html#t%3AMonad"
>Monad</A
></TT
>, define <TT
><TT
><A HREF="MonadUtils.html#v%3Apure"
>pure</A
></TT
> = <TT
><A HREF="../base-4.2.0.2/Control-Monad.html#v%3Areturn"
>return</A
></TT
></TT
> and <TT
>(<TT
><A HREF="MonadUtils.html#v%3A%3C%2A%3E"
>&lt;*&gt;</A
></TT
>) = <TT
><A HREF="../base-4.2.0.2/Control-Monad.html#v%3Aap"
>ap</A
></TT
></TT
>.
</P
><P
>Minimal complete definition: <TT
><A HREF="MonadUtils.html#v%3Apure"
>pure</A
></TT
> and <TT
><A HREF="MonadUtils.html#v%3A%3C%2A%3E"
>&lt;*&gt;</A
></TT
>.
</P
></TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="section4"
>Methods</TD
></TR
><TR
><TD CLASS="body"
><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
><TR
><TD CLASS="decl"
><A NAME="v:pure"
><A NAME="v%3Apure"
></A
></A
><B
>pure</B
> ::  a -&gt; f a</TD
></TR
><TR
><TD CLASS="doc"
>Lift a value.
</TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v:<*>"
><A NAME="v%3A%3C%2A%3E"
></A
></A
><B
>(&lt;*&gt;)</B
> ::  f (a -&gt; b) -&gt; f a -&gt; f b</TD
></TR
><TR
><TD CLASS="doc"
>Sequential application.
</TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v:*>"
><A NAME="v%3A%2A%3E"
></A
></A
><B
>(*&gt;)</B
> ::  f a -&gt; f b -&gt; f b</TD
></TR
><TR
><TD CLASS="doc"
>Sequence actions, discarding the value of the first argument.
</TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v:<*"
><A NAME="v%3A%3C%2A"
></A
></A
><B
>(&lt;*)</B
> ::  f a -&gt; f b -&gt; f a</TD
></TR
><TR
><TD CLASS="doc"
>Sequence actions, discarding the value of the second argument.
</TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="section4"
><IMG SRC="minus.gif" CLASS="coll" ONCLICK="toggle(this,'i:Applicative')" ALT="show/hide"
> Instances</TD
></TR
><TR
><TD CLASS="body"
><DIV ID="i:Applicative" STYLE="display:block;"
><TABLE CLASS="vanilla" CELLSPACING="1" CELLPADDING="0"
><TR
><TD CLASS="decl"
><A HREF="MonadUtils.html#t%3AApplicative"
>Applicative</A
> []</TD
></TR
><TR
><TD CLASS="decl"
><A HREF="MonadUtils.html#t%3AApplicative"
>Applicative</A
> <A HREF="../base-4.2.0.2/System-IO.html#t%3AIO"
>IO</A
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="MonadUtils.html#t%3AApplicative"
>Applicative</A
> <A HREF="../base-4.2.0.2/Data-Maybe.html#t%3AMaybe"
>Maybe</A
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="MonadUtils.html#t%3AApplicative"
>Applicative</A
> <A HREF="../base-4.2.0.2/Control-Applicative.html#t%3AZipList"
>ZipList</A
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="MonadUtils.html#t%3AApplicative"
>Applicative</A
> Id</TD
></TR
><TR
><TD CLASS="decl"
><A HREF="MonadUtils.html#t%3AApplicative"
>Applicative</A
> <A HREF="UniqSupply.html#t%3AUniqSM"
>UniqSM</A
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="MonadUtils.html#t%3AApplicative"
>Applicative</A
> <A HREF="CoreMonad.html#t%3ACoreM"
>CoreM</A
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="MonadUtils.html#t%3AApplicative"
>Applicative</A
> ((-&gt;) a)</TD
></TR
><TR
><TD CLASS="decl"
><A HREF="../base-4.2.0.2/Data-Monoid.html#t%3AMonoid"
>Monoid</A
> a =&gt; <A HREF="MonadUtils.html#t%3AApplicative"
>Applicative</A
> (<A HREF="../ghc-prim-0.2.0.0/GHC-Tuple.html#t%3A%28%2C%29"
>(,)</A
> a)</TD
></TR
><TR
><TD CLASS="decl"
><A HREF="../base-4.2.0.2/Data-Monoid.html#t%3AMonoid"
>Monoid</A
> m =&gt; <A HREF="MonadUtils.html#t%3AApplicative"
>Applicative</A
> (<A HREF="../base-4.2.0.2/Control-Applicative.html#t%3AConst"
>Const</A
> m)</TD
></TR
><TR
><TD CLASS="decl"
><A HREF="../base-4.2.0.2/Control-Monad.html#t%3AMonad"
>Monad</A
> m =&gt; <A HREF="MonadUtils.html#t%3AApplicative"
>Applicative</A
> (<A HREF="../base-4.2.0.2/Control-Applicative.html#t%3AWrappedMonad"
>WrappedMonad</A
> m)</TD
></TR
><TR
><TD CLASS="decl"
><A HREF="MonadUtils.html#t%3AApplicative"
>Applicative</A
> (State s)</TD
></TR
><TR
><TD CLASS="decl"
><A HREF="MonadUtils.html#t%3AApplicative"
>Applicative</A
> (<A HREF="State.html#t%3AState"
>State</A
> s)</TD
></TR
><TR
><TD CLASS="decl"
><A HREF="MonadUtils.html#t%3AApplicative"
>Applicative</A
> (<A HREF="IOEnv.html#t%3AIOEnv"
>IOEnv</A
> m)</TD
></TR
><TR
><TD CLASS="decl"
><A HREF="../base-4.2.0.2/Control-Arrow.html#t%3AArrow"
>Arrow</A
> a =&gt; <A HREF="MonadUtils.html#t%3AApplicative"
>Applicative</A
> (<A HREF="../base-4.2.0.2/Control-Applicative.html#t%3AWrappedArrow"
>WrappedArrow</A
> a b)</TD
></TR
></TABLE
></DIV
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v:<$>"
><A NAME="v%3A%3C%24%3E"
></A
></A
><B
>(&lt;$&gt;)</B
> :: <A HREF="../base-4.2.0.2/Control-Monad.html#t%3AFunctor"
>Functor</A
> f =&gt; (a -&gt; b) -&gt; f a -&gt; f b</TD
></TR
><TR
><TD CLASS="doc"
>An infix synonym for <TT
><A HREF="../base-4.2.0.2/Control-Monad.html#v%3Afmap"
>fmap</A
></TT
>.
</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><SPAN CLASS="keyword"
>class</SPAN
> <A HREF="../base-4.2.0.2/Control-Monad.html#t%3AMonad"
>Monad</A
> m =&gt; <A NAME="t:MonadFix"
><A NAME="t%3AMonadFix"
></A
></A
><B
>MonadFix</B
> m  <SPAN CLASS="keyword"
>where</SPAN
></TD
></TR
><TR
><TD CLASS="body"
><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
><TR
><TD CLASS="ndoc"
><P
>Monads having fixed points with a 'knot-tying' semantics.
 Instances of <TT
><A HREF="MonadUtils.html#t%3AMonadFix"
>MonadFix</A
></TT
> should satisfy the following laws:
</P
><DL
><DT
><EM
>purity</EM
></DT
><DD
>
      <TT
><TT
><A HREF="MonadUtils.html#v%3Amfix"
>mfix</A
></TT
> (<TT
><A HREF="../base-4.2.0.2/Control-Monad.html#v%3Areturn"
>return</A
></TT
> . h)  =  <TT
><A HREF="../base-4.2.0.2/Control-Monad.html#v%3Areturn"
>return</A
></TT
> (<TT
><A HREF="../base-4.2.0.2/Data-Function.html#v%3Afix"
>fix</A
></TT
> h)</TT
>
</DD
><DT
><EM
>left shrinking</EM
> (or <EM
>tightening</EM
>)</DT
><DD
>
      <TT
><TT
><A HREF="MonadUtils.html#v%3Amfix"
>mfix</A
></TT
> (\x -&gt; a &gt;&gt;= \y -&gt; f x y)  =  a &gt;&gt;= \y -&gt; <TT
><A HREF="MonadUtils.html#v%3Amfix"
>mfix</A
></TT
> (\x -&gt; f x y)</TT
>
</DD
><DT
><EM
>sliding</EM
></DT
><DD
>
      <TT
><TT
><A HREF="MonadUtils.html#v%3Amfix"
>mfix</A
></TT
> (Control.Monad.liftM h . f)  =  Control.Monad.liftM h (<TT
><A HREF="MonadUtils.html#v%3Amfix"
>mfix</A
></TT
> (f . h))</TT
>,
      for strict <TT
>h</TT
>.
</DD
><DT
><EM
>nesting</EM
></DT
><DD
>
      <TT
><TT
><A HREF="MonadUtils.html#v%3Amfix"
>mfix</A
></TT
> (\x -&gt; <TT
><A HREF="MonadUtils.html#v%3Amfix"
>mfix</A
></TT
> (\y -&gt; f x y))  =  <TT
><A HREF="MonadUtils.html#v%3Amfix"
>mfix</A
></TT
> (\x -&gt; f x x)</TT
>
</DD
></DL
><P
>This class is used in the translation of the recursive <TT
>do</TT
> notation
 supported by GHC and Hugs.
</P
></TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="section4"
>Methods</TD
></TR
><TR
><TD CLASS="body"
><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
><TR
><TD CLASS="decl"
><A NAME="v:mfix"
><A NAME="v%3Amfix"
></A
></A
><B
>mfix</B
> ::  (a -&gt; m a) -&gt; m a</TD
></TR
><TR
><TD CLASS="doc"
>The fixed point of a monadic computation.
 <TT
><TT
><A HREF="MonadUtils.html#v%3Amfix"
>mfix</A
></TT
> f</TT
> executes the action <TT
>f</TT
> only once, with the eventual
 output fed back as the input.  Hence <TT
>f</TT
> should not be strict,
 for then <TT
><TT
><A HREF="MonadUtils.html#v%3Amfix"
>mfix</A
></TT
> f</TT
> would diverge.
</TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="section4"
><IMG SRC="minus.gif" CLASS="coll" ONCLICK="toggle(this,'i:MonadFix')" ALT="show/hide"
> Instances</TD
></TR
><TR
><TD CLASS="body"
><DIV ID="i:MonadFix" STYLE="display:block;"
><TABLE CLASS="vanilla" CELLSPACING="1" CELLPADDING="0"
><TR
><TD CLASS="decl"
><A HREF="MonadUtils.html#t%3AMonadFix"
>MonadFix</A
> []</TD
></TR
><TR
><TD CLASS="decl"
><A HREF="MonadUtils.html#t%3AMonadFix"
>MonadFix</A
> <A HREF="../base-4.2.0.2/System-IO.html#t%3AIO"
>IO</A
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="MonadUtils.html#t%3AMonadFix"
>MonadFix</A
> <A HREF="../base-4.2.0.2/Data-Maybe.html#t%3AMaybe"
>Maybe</A
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="MonadUtils.html#t%3AMonadFix"
>MonadFix</A
> <A HREF="UniqSupply.html#t%3AUniqSM"
>UniqSM</A
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="MonadUtils.html#t%3AMonadFix"
>MonadFix</A
> LneM</TD
></TR
><TR
><TD CLASS="decl"
><A HREF="MonadUtils.html#t%3AMonadFix"
>MonadFix</A
> ((-&gt;) r)</TD
></TR
><TR
><TD CLASS="decl"
><A HREF="MonadUtils.html#t%3AMonadFix"
>MonadFix</A
> (<A HREF="../base-4.2.0.2/Control-Monad-ST.html#t%3AST"
>ST</A
> s)</TD
></TR
><TR
><TD CLASS="decl"
><A HREF="MonadUtils.html#t%3AMonadFix"
>MonadFix</A
> (<A HREF="../base-4.2.0.2/Control-Monad-ST-Lazy.html#t%3AST"
>ST</A
> s)</TD
></TR
></TABLE
></DIV
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><SPAN CLASS="keyword"
>class</SPAN
> <A HREF="../base-4.2.0.2/Control-Monad.html#t%3AMonad"
>Monad</A
> m =&gt; <A NAME="t:MonadIO"
><A NAME="t%3AMonadIO"
></A
></A
><B
>MonadIO</B
> m  <SPAN CLASS="keyword"
>where</SPAN
></TD
></TR
><TR
><TD CLASS="body"
><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="section4"
>Methods</TD
></TR
><TR
><TD CLASS="body"
><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
><TR
><TD CLASS="decl"
><A NAME="v:liftIO"
><A NAME="v%3AliftIO"
></A
></A
><B
>liftIO</B
> ::  <A HREF="../base-4.2.0.2/System-IO.html#t%3AIO"
>IO</A
> a -&gt; m a</TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="section4"
><IMG SRC="minus.gif" CLASS="coll" ONCLICK="toggle(this,'i:MonadIO')" ALT="show/hide"
> Instances</TD
></TR
><TR
><TD CLASS="body"
><DIV ID="i:MonadIO" STYLE="display:block;"
><TABLE CLASS="vanilla" CELLSPACING="1" CELLPADDING="0"
><TR
><TD CLASS="decl"
><A HREF="MonadUtils.html#t%3AMonadIO"
>MonadIO</A
> <A HREF="../base-4.2.0.2/System-IO.html#t%3AIO"
>IO</A
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="MonadUtils.html#t%3AMonadIO"
>MonadIO</A
> <A HREF="HscTypes.html#t%3AGhc"
>Ghc</A
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="MonadUtils.html#t%3AMonadIO"
>MonadIO</A
> <A HREF="CoreMonad.html#t%3ACoreM"
>CoreM</A
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="MonadUtils.html#t%3AMonadIO"
>MonadIO</A
> (<A HREF="IOEnv.html#t%3AIOEnv"
>IOEnv</A
> env)</TD
></TR
><TR
><TD CLASS="decl"
><A HREF="MonadUtils.html#t%3AMonadIO"
>MonadIO</A
> m =&gt; <A HREF="MonadUtils.html#t%3AMonadIO"
>MonadIO</A
> (<A HREF="HscTypes.html#t%3AGhcT"
>GhcT</A
> m)</TD
></TR
></TABLE
></DIV
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v:liftIO1"
><A NAME="v%3AliftIO1"
></A
></A
><B
>liftIO1</B
> :: <A HREF="MonadUtils.html#t%3AMonadIO"
>MonadIO</A
> m =&gt; (a -&gt; <A HREF="../base-4.2.0.2/System-IO.html#t%3AIO"
>IO</A
> b) -&gt; a -&gt; m b</TD
></TR
><TR
><TD CLASS="doc"
>Lift an <TT
><A HREF="../base-4.2.0.2/System-IO.html#t%3AIO"
>IO</A
></TT
> operation with 1 argument into another monad
</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v:liftIO2"
><A NAME="v%3AliftIO2"
></A
></A
><B
>liftIO2</B
> :: <A HREF="MonadUtils.html#t%3AMonadIO"
>MonadIO</A
> m =&gt; (a -&gt; b -&gt; <A HREF="../base-4.2.0.2/System-IO.html#t%3AIO"
>IO</A
> c) -&gt; a -&gt; b -&gt; m c</TD
></TR
><TR
><TD CLASS="doc"
>Lift an <TT
><A HREF="../base-4.2.0.2/System-IO.html#t%3AIO"
>IO</A
></TT
> operation with 2 arguments into another monad
</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v:liftIO3"
><A NAME="v%3AliftIO3"
></A
></A
><B
>liftIO3</B
> :: <A HREF="MonadUtils.html#t%3AMonadIO"
>MonadIO</A
> m =&gt; (a -&gt; b -&gt; c -&gt; <A HREF="../base-4.2.0.2/System-IO.html#t%3AIO"
>IO</A
> d) -&gt; a -&gt; b -&gt; c -&gt; m d</TD
></TR
><TR
><TD CLASS="doc"
>Lift an <TT
><A HREF="../base-4.2.0.2/System-IO.html#t%3AIO"
>IO</A
></TT
> operation with 3 arguments into another monad
</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v:liftIO4"
><A NAME="v%3AliftIO4"
></A
></A
><B
>liftIO4</B
> :: <A HREF="MonadUtils.html#t%3AMonadIO"
>MonadIO</A
> m =&gt; (a -&gt; b -&gt; c -&gt; d -&gt; <A HREF="../base-4.2.0.2/System-IO.html#t%3AIO"
>IO</A
> e) -&gt; a -&gt; b -&gt; c -&gt; d -&gt; m e</TD
></TR
><TR
><TD CLASS="doc"
>Lift an <TT
><A HREF="../base-4.2.0.2/System-IO.html#t%3AIO"
>IO</A
></TT
> operation with 4 arguments into another monad
</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v:zipWith3M"
><A NAME="v%3AzipWith3M"
></A
></A
><B
>zipWith3M</B
> :: <A HREF="../base-4.2.0.2/Control-Monad.html#t%3AMonad"
>Monad</A
> m =&gt; (a -&gt; b -&gt; c -&gt; m d) -&gt; [a] -&gt; [b] -&gt; [c] -&gt; m [d]</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v:mapAndUnzipM"
><A NAME="v%3AmapAndUnzipM"
></A
></A
><B
>mapAndUnzipM</B
> :: <A HREF="../base-4.2.0.2/Control-Monad.html#t%3AMonad"
>Monad</A
> m =&gt; (a -&gt; m (b, c)) -&gt; [a] -&gt; m ([b], [c])</TD
></TR
><TR
><TD CLASS="doc"
>The <TT
><A HREF="MonadUtils.html#v%3AmapAndUnzipM"
>mapAndUnzipM</A
></TT
> function maps its first argument over a list, returning
 the result as a pair of lists. This function is mainly used with complicated
 data structures or a state-transforming monad.
</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v:mapAndUnzip3M"
><A NAME="v%3AmapAndUnzip3M"
></A
></A
><B
>mapAndUnzip3M</B
> :: <A HREF="../base-4.2.0.2/Control-Monad.html#t%3AMonad"
>Monad</A
> m =&gt; (a -&gt; m (b, c, d)) -&gt; [a] -&gt; m ([b], [c], [d])</TD
></TR
><TR
><TD CLASS="doc"
>mapAndUnzipM for triples
</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v:mapAndUnzip4M"
><A NAME="v%3AmapAndUnzip4M"
></A
></A
><B
>mapAndUnzip4M</B
> :: <A HREF="../base-4.2.0.2/Control-Monad.html#t%3AMonad"
>Monad</A
> m =&gt; (a -&gt; m (b, c, d, e)) -&gt; [a] -&gt; m ([b], [c], [d], [e])</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v:mapAccumLM"
><A NAME="v%3AmapAccumLM"
></A
></A
><B
>mapAccumLM</B
></TD
></TR
><TR
><TD CLASS="body"
><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
><TR
><TD CLASS="arg"
>:: <A HREF="../base-4.2.0.2/Control-Monad.html#t%3AMonad"
>Monad</A
> m</TD
><TD CLASS="rdoc"
></TD
></TR
><TR
><TD CLASS="arg"
>=&gt; acc -&gt; x -&gt; m (acc, y)</TD
><TD CLASS="rdoc"
>combining funcction
</TD
></TR
><TR
><TD CLASS="arg"
>-&gt; acc</TD
><TD CLASS="rdoc"
>initial state
</TD
></TR
><TR
><TD CLASS="arg"
>-&gt; [x]</TD
><TD CLASS="rdoc"
>inputs
</TD
></TR
><TR
><TD CLASS="arg"
>-&gt; m (acc, [y])</TD
><TD CLASS="rdoc"
>final state, outputs
</TD
></TR
><TR
><TD CLASS="ndoc" COLSPAN="2"
>Monadic version of mapAccumL
</TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v:mapSndM"
><A NAME="v%3AmapSndM"
></A
></A
><B
>mapSndM</B
> :: <A HREF="../base-4.2.0.2/Control-Monad.html#t%3AMonad"
>Monad</A
> m =&gt; (b -&gt; m c) -&gt; [(a, b)] -&gt; m [(a, c)]</TD
></TR
><TR
><TD CLASS="doc"
>Monadic version of mapSnd
</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v:concatMapM"
><A NAME="v%3AconcatMapM"
></A
></A
><B
>concatMapM</B
> :: <A HREF="../base-4.2.0.2/Control-Monad.html#t%3AMonad"
>Monad</A
> m =&gt; (a -&gt; m [b]) -&gt; [a] -&gt; m [b]</TD
></TR
><TR
><TD CLASS="doc"
>Monadic version of concatMap
</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v:mapMaybeM"
><A NAME="v%3AmapMaybeM"
></A
></A
><B
>mapMaybeM</B
> :: <A HREF="../base-4.2.0.2/Control-Monad.html#t%3AMonad"
>Monad</A
> m =&gt; (a -&gt; m (<A HREF="../base-4.2.0.2/Data-Maybe.html#t%3AMaybe"
>Maybe</A
> b)) -&gt; [a] -&gt; m [b]</TD
></TR
><TR
><TD CLASS="doc"
>Monadic version of mapMaybe
</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v:anyM"
><A NAME="v%3AanyM"
></A
></A
><B
>anyM</B
> :: <A HREF="../base-4.2.0.2/Control-Monad.html#t%3AMonad"
>Monad</A
> m =&gt; (a -&gt; m <A HREF="../base-4.2.0.2/Data-Bool.html#t%3ABool"
>Bool</A
>) -&gt; [a] -&gt; m <A HREF="../base-4.2.0.2/Data-Bool.html#t%3ABool"
>Bool</A
></TD
></TR
><TR
><TD CLASS="doc"
>Monadic version of <TT
><A HREF="../base-4.2.0.2/Data-List.html#v%3Aany"
>any</A
></TT
>, aborts the computation at the first <TT
>True</TT
> value
</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v:allM"
><A NAME="v%3AallM"
></A
></A
><B
>allM</B
> :: <A HREF="../base-4.2.0.2/Control-Monad.html#t%3AMonad"
>Monad</A
> m =&gt; (a -&gt; m <A HREF="../base-4.2.0.2/Data-Bool.html#t%3ABool"
>Bool</A
>) -&gt; [a] -&gt; m <A HREF="../base-4.2.0.2/Data-Bool.html#t%3ABool"
>Bool</A
></TD
></TR
><TR
><TD CLASS="doc"
>Monad version of <TT
><A HREF="../base-4.2.0.2/Data-List.html#v%3Aall"
>all</A
></TT
>, aborts the computation at the first <TT
>False</TT
> value
</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v:foldlM"
><A NAME="v%3AfoldlM"
></A
></A
><B
>foldlM</B
> :: <A HREF="../base-4.2.0.2/Control-Monad.html#t%3AMonad"
>Monad</A
> m =&gt; (a -&gt; b -&gt; m a) -&gt; a -&gt; [b] -&gt; m a</TD
></TR
><TR
><TD CLASS="doc"
>Monadic version of foldl
</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v:foldlM_"
><A NAME="v%3AfoldlM_"
></A
></A
><B
>foldlM_</B
> :: <A HREF="../base-4.2.0.2/Control-Monad.html#t%3AMonad"
>Monad</A
> m =&gt; (a -&gt; b -&gt; m a) -&gt; a -&gt; [b] -&gt; m <A HREF="../ghc-prim-0.2.0.0/GHC-Unit.html#t%3A%28%29"
>()</A
></TD
></TR
><TR
><TD CLASS="doc"
>Monadic version of foldl that discards its result
</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v:foldrM"
><A NAME="v%3AfoldrM"
></A
></A
><B
>foldrM</B
> :: <A HREF="../base-4.2.0.2/Control-Monad.html#t%3AMonad"
>Monad</A
> m =&gt; (b -&gt; a -&gt; m a) -&gt; a -&gt; [b] -&gt; m a</TD
></TR
><TR
><TD CLASS="doc"
>Monadic version of foldr
</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v:maybeMapM"
><A NAME="v%3AmaybeMapM"
></A
></A
><B
>maybeMapM</B
> :: <A HREF="../base-4.2.0.2/Control-Monad.html#t%3AMonad"
>Monad</A
> m =&gt; (a -&gt; m b) -&gt; <A HREF="../base-4.2.0.2/Data-Maybe.html#t%3AMaybe"
>Maybe</A
> a -&gt; m (<A HREF="../base-4.2.0.2/Data-Maybe.html#t%3AMaybe"
>Maybe</A
> b)</TD
></TR
><TR
><TD CLASS="doc"
>Monadic version of fmap specialised for Maybe
</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="botbar"
>Produced by <A HREF="http://www.haskell.org/haddock/"
>Haddock</A
> version 2.6.1</TD
></TR
></TABLE
></BODY
></HTML
>