<!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 => <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 -> f a</TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3A%3C%2A%3E" >(<*>)</A > :: f (a -> b) -> f a -> f b</TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3A%2A%3E" >(*>)</A > :: f a -> f b -> f b</TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3A%3C%2A" >(<*)</A > :: f a -> f b -> f a</TD ></TR ></TABLE ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3A%3C%24%3E" >(<$>)</A > :: <A HREF="../base-4.2.0.2/Control-Monad.html#t%3AFunctor" >Functor</A > f => (a -> b) -> f a -> 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 => <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 -> m a) -> 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 => <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 -> 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 => (a -> <A HREF="../base-4.2.0.2/System-IO.html#t%3AIO" >IO</A > b) -> a -> 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 => (a -> b -> <A HREF="../base-4.2.0.2/System-IO.html#t%3AIO" >IO</A > c) -> a -> b -> 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 => (a -> b -> c -> <A HREF="../base-4.2.0.2/System-IO.html#t%3AIO" >IO</A > d) -> a -> b -> c -> 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 => (a -> b -> c -> d -> <A HREF="../base-4.2.0.2/System-IO.html#t%3AIO" >IO</A > e) -> a -> b -> c -> d -> 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 => (a -> b -> c -> m d) -> [a] -> [b] -> [c] -> 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 => (a -> m (b, c)) -> [a] -> 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 => (a -> m (b, c, d)) -> [a] -> 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 => (a -> m (b, c, d, e)) -> [a] -> 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 => (acc -> x -> m (acc, y)) -> acc -> [x] -> 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 => (b -> m c) -> [(a, b)] -> 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 => (a -> m [b]) -> [a] -> 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 => (a -> m (<A HREF="../base-4.2.0.2/Data-Maybe.html#t%3AMaybe" >Maybe</A > b)) -> [a] -> 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 => (a -> m <A HREF="../base-4.2.0.2/Data-Bool.html#t%3ABool" >Bool</A >) -> [a] -> 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 => (a -> m <A HREF="../base-4.2.0.2/Data-Bool.html#t%3ABool" >Bool</A >) -> [a] -> 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 => (a -> b -> m a) -> a -> [b] -> 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 => (a -> b -> m a) -> a -> [b] -> 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 => (b -> a -> m a) -> a -> [b] -> 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 => (a -> m b) -> <A HREF="../base-4.2.0.2/Data-Maybe.html#t%3AMaybe" >Maybe</A > a -> 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 => <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" ><*></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" ><*></A ></TT > u <TT ><A HREF="MonadUtils.html#v%3A%3C%2A%3E" ><*></A ></TT > v <TT ><A HREF="MonadUtils.html#v%3A%3C%2A%3E" ><*></A ></TT > w = u <TT ><A HREF="MonadUtils.html#v%3A%3C%2A%3E" ><*></A ></TT > (v <TT ><A HREF="MonadUtils.html#v%3A%3C%2A%3E" ><*></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" ><*></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" ><*></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" ><*></A ></TT > u</TT > </DD ><DT ><EM >ignore left value</EM ></DT ><DD > <TT >u <TT ><A HREF="MonadUtils.html#v%3A%2A%3E" >*></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" ><*></A ></TT > u <TT ><A HREF="MonadUtils.html#v%3A%3C%2A%3E" ><*></A ></TT > v</TT > </DD ><DT ><EM >ignore right value</EM ></DT ><DD > <TT >u <TT ><A HREF="MonadUtils.html#v%3A%3C%2A" ><*</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" ><*></A ></TT > u <TT ><A HREF="MonadUtils.html#v%3A%3C%2A%3E" ><*></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" ><*></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" ><*></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" ><*></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 -> 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 >(<*>)</B > :: f (a -> b) -> f a -> 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 >(*>)</B > :: f a -> f b -> 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 >(<*)</B > :: f a -> f b -> 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 > ((->) a)</TD ></TR ><TR ><TD CLASS="decl" ><A HREF="../base-4.2.0.2/Data-Monoid.html#t%3AMonoid" >Monoid</A > a => <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 => <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 => <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 => <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 >(<$>)</B > :: <A HREF="../base-4.2.0.2/Control-Monad.html#t%3AFunctor" >Functor</A > f => (a -> b) -> f a -> 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 => <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 -> a >>= \y -> f x y) = a >>= \y -> <TT ><A HREF="MonadUtils.html#v%3Amfix" >mfix</A ></TT > (\x -> 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 -> <TT ><A HREF="MonadUtils.html#v%3Amfix" >mfix</A ></TT > (\y -> f x y)) = <TT ><A HREF="MonadUtils.html#v%3Amfix" >mfix</A ></TT > (\x -> 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 -> m a) -> 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 > ((->) 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 => <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 -> 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 => <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 => (a -> <A HREF="../base-4.2.0.2/System-IO.html#t%3AIO" >IO</A > b) -> a -> 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 => (a -> b -> <A HREF="../base-4.2.0.2/System-IO.html#t%3AIO" >IO</A > c) -> a -> b -> 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 => (a -> b -> c -> <A HREF="../base-4.2.0.2/System-IO.html#t%3AIO" >IO</A > d) -> a -> b -> c -> 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 => (a -> b -> c -> d -> <A HREF="../base-4.2.0.2/System-IO.html#t%3AIO" >IO</A > e) -> a -> b -> c -> d -> 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 => (a -> b -> c -> m d) -> [a] -> [b] -> [c] -> 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 => (a -> m (b, c)) -> [a] -> 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 => (a -> m (b, c, d)) -> [a] -> 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 => (a -> m (b, c, d, e)) -> [a] -> 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" >=> acc -> x -> m (acc, y)</TD ><TD CLASS="rdoc" >combining funcction </TD ></TR ><TR ><TD CLASS="arg" >-> acc</TD ><TD CLASS="rdoc" >initial state </TD ></TR ><TR ><TD CLASS="arg" >-> [x]</TD ><TD CLASS="rdoc" >inputs </TD ></TR ><TR ><TD CLASS="arg" >-> 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 => (b -> m c) -> [(a, b)] -> 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 => (a -> m [b]) -> [a] -> 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 => (a -> m (<A HREF="../base-4.2.0.2/Data-Maybe.html#t%3AMaybe" >Maybe</A > b)) -> [a] -> 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 => (a -> m <A HREF="../base-4.2.0.2/Data-Bool.html#t%3ABool" >Bool</A >) -> [a] -> 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 => (a -> m <A HREF="../base-4.2.0.2/Data-Bool.html#t%3ABool" >Bool</A >) -> [a] -> 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 => (a -> b -> m a) -> a -> [b] -> 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 => (a -> b -> m a) -> a -> [b] -> 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 => (b -> a -> m a) -> a -> [b] -> 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 => (a -> m b) -> <A HREF="../base-4.2.0.2/Data-Maybe.html#t%3AMaybe" >Maybe</A > a -> 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 >