Sophie

Sophie

distrib > Mageia > 3 > x86_64 > by-pkgid > d5d42515f78bdb3a5381de09f2cf4125 > files > 945

ghc-doc-7.4.2-2.mga3.x86_64.rpm

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>MonadUtils</title><link href="ocean.css" rel="stylesheet" type="text/css" title="Ocean" /><script src="haddock-util.js" type="text/javascript"></script><script type="text/javascript">//<![CDATA[
window.onload = function () {pageLoad();setSynopsis("mini_MonadUtils.html");};
//]]>
</script></head><body><div id="package-header"><ul class="links" id="page-menu"><li><a href="index.html">Contents</a></li><li><a href="doc-index.html">Index</a></li></ul><p class="caption">ghc-7.4.2: The GHC API</p></div><div id="content"><div id="module-header"><table class="info"><tr><th>Safe Haskell</th><td>None</td></tr></table><p class="caption">MonadUtils</p></div><div id="description"><p class="caption">Description</p><div class="doc"><p>Utilities related to Monad and Applicative classes
   Mostly for backwards compatability.
</p></div></div><div id="synopsis"><p id="control.syn" class="caption expander" onclick="toggleSection('syn')">Synopsis</p><ul id="section.syn" class="hide" onclick="toggleSection('syn')"><li class="src short"><span class="keyword">class</span> <a href="../base-4.5.1.0/Control-Monad.html#t:Functor">Functor</a> f =&gt; <a href="#t:Applicative">Applicative</a> f  <span class="keyword">where</span><ul class="subs"><li><a href="#v:pure">pure</a> ::  a -&gt; f a</li><li><a href="#v:-60--42--62-">(&lt;*&gt;)</a> ::  f (a -&gt; b) -&gt; f a -&gt; f b</li><li><a href="#v:-42--62-">(*&gt;)</a> ::  f a -&gt; f b -&gt; f b</li><li><a href="#v:-60--42-">(&lt;*)</a> ::  f a -&gt; f b -&gt; f a</li></ul></li><li class="src short"><a href="#v:-60--36--62-">(&lt;$&gt;)</a> :: <a href="../base-4.5.1.0/Control-Monad.html#t:Functor">Functor</a> f =&gt; (a -&gt; b) -&gt; f a -&gt; f b</li><li class="src short"><span class="keyword">class</span> <a href="../base-4.5.1.0/Control-Monad.html#t:Monad">Monad</a> m =&gt; <a href="#t:MonadFix">MonadFix</a> m  <span class="keyword">where</span><ul class="subs"><li><a href="#v:mfix">mfix</a> ::  (a -&gt; m a) -&gt; m a</li></ul></li><li class="src short"><span class="keyword">class</span> <a href="../base-4.5.1.0/Control-Monad.html#t:Monad">Monad</a> m =&gt; <a href="#t:MonadIO">MonadIO</a> m  <span class="keyword">where</span><ul class="subs"><li><a href="#v:liftIO">liftIO</a> ::  <a href="../base-4.5.1.0/System-IO.html#t:IO">IO</a> a -&gt; m a</li></ul></li><li class="src short"><span class="keyword">data</span>  <a href="#t:ID">ID</a> a</li><li class="src short"><a href="#v:runID">runID</a> ::  <a href="MonadUtils.html#t:ID">ID</a> a -&gt; a</li><li class="src short"><a href="#v:liftIO1">liftIO1</a> :: <a href="MonadUtils.html#t:MonadIO">MonadIO</a> m =&gt; (a -&gt; <a href="../base-4.5.1.0/System-IO.html#t:IO">IO</a> b) -&gt; a -&gt; m b</li><li class="src short"><a href="#v:liftIO2">liftIO2</a> :: <a href="MonadUtils.html#t:MonadIO">MonadIO</a> m =&gt; (a -&gt; b -&gt; <a href="../base-4.5.1.0/System-IO.html#t:IO">IO</a> c) -&gt; a -&gt; b -&gt; m c</li><li class="src short"><a href="#v:liftIO3">liftIO3</a> :: <a href="MonadUtils.html#t:MonadIO">MonadIO</a> m =&gt; (a -&gt; b -&gt; c -&gt; <a href="../base-4.5.1.0/System-IO.html#t:IO">IO</a> d) -&gt; a -&gt; b -&gt; c -&gt; m d</li><li class="src short"><a href="#v:liftIO4">liftIO4</a> :: <a href="MonadUtils.html#t:MonadIO">MonadIO</a> m =&gt; (a -&gt; b -&gt; c -&gt; d -&gt; <a href="../base-4.5.1.0/System-IO.html#t:IO">IO</a> e) -&gt; a -&gt; b -&gt; c -&gt; d -&gt; m e</li><li class="src short"><a href="#v:zipWith3M">zipWith3M</a> :: <a href="../base-4.5.1.0/Control-Monad.html#t:Monad">Monad</a> m =&gt; (a -&gt; b -&gt; c -&gt; m d) -&gt; [a] -&gt; [b] -&gt; [c] -&gt; m [d]</li><li class="src short"><a href="#v:mapAndUnzipM">mapAndUnzipM</a> :: <a href="../base-4.5.1.0/Control-Monad.html#t:Monad">Monad</a> m =&gt; (a -&gt; m (b, c)) -&gt; [a] -&gt; m ([b], [c])</li><li class="src short"><a href="#v:mapAndUnzip3M">mapAndUnzip3M</a> :: <a href="../base-4.5.1.0/Control-Monad.html#t:Monad">Monad</a> m =&gt; (a -&gt; m (b, c, d)) -&gt; [a] -&gt; m ([b], [c], [d])</li><li class="src short"><a href="#v:mapAndUnzip4M">mapAndUnzip4M</a> :: <a href="../base-4.5.1.0/Control-Monad.html#t:Monad">Monad</a> m =&gt; (a -&gt; m (b, c, d, e)) -&gt; [a] -&gt; m ([b], [c], [d], [e])</li><li class="src short"><a href="#v:mapAccumLM">mapAccumLM</a> :: <a href="../base-4.5.1.0/Control-Monad.html#t:Monad">Monad</a> m =&gt; (acc -&gt; x -&gt; m (acc, y)) -&gt; acc -&gt; [x] -&gt; m (acc, [y])</li><li class="src short"><a href="#v:mapSndM">mapSndM</a> :: <a href="../base-4.5.1.0/Control-Monad.html#t:Monad">Monad</a> m =&gt; (b -&gt; m c) -&gt; [(a, b)] -&gt; m [(a, c)]</li><li class="src short"><a href="#v:concatMapM">concatMapM</a> :: <a href="../base-4.5.1.0/Control-Monad.html#t:Monad">Monad</a> m =&gt; (a -&gt; m [b]) -&gt; [a] -&gt; m [b]</li><li class="src short"><a href="#v:mapMaybeM">mapMaybeM</a> :: <a href="../base-4.5.1.0/Control-Monad.html#t:Monad">Monad</a> m =&gt; (a -&gt; m (<a href="../base-4.5.1.0/Data-Maybe.html#t:Maybe">Maybe</a> b)) -&gt; [a] -&gt; m [b]</li><li class="src short"><a href="#v:fmapMaybeM">fmapMaybeM</a> :: <a href="../base-4.5.1.0/Control-Monad.html#t:Monad">Monad</a> m =&gt; (a -&gt; m b) -&gt; <a href="../base-4.5.1.0/Data-Maybe.html#t:Maybe">Maybe</a> a -&gt; m (<a href="../base-4.5.1.0/Data-Maybe.html#t:Maybe">Maybe</a> b)</li><li class="src short"><a href="#v:fmapEitherM">fmapEitherM</a> :: <a href="../base-4.5.1.0/Control-Monad.html#t:Monad">Monad</a> m =&gt; (a -&gt; m b) -&gt; (c -&gt; m d) -&gt; <a href="../base-4.5.1.0/Data-Either.html#t:Either">Either</a> a c -&gt; m (<a href="../base-4.5.1.0/Data-Either.html#t:Either">Either</a> b d)</li><li class="src short"><a href="#v:anyM">anyM</a> :: <a href="../base-4.5.1.0/Control-Monad.html#t:Monad">Monad</a> m =&gt; (a -&gt; m <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a>) -&gt; [a] -&gt; m <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></li><li class="src short"><a href="#v:allM">allM</a> :: <a href="../base-4.5.1.0/Control-Monad.html#t:Monad">Monad</a> m =&gt; (a -&gt; m <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a>) -&gt; [a] -&gt; m <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></li><li class="src short"><a href="#v:foldlM">foldlM</a> :: <a href="../base-4.5.1.0/Control-Monad.html#t:Monad">Monad</a> m =&gt; (a -&gt; b -&gt; m a) -&gt; a -&gt; [b] -&gt; m a</li><li class="src short"><a href="#v:foldlM_">foldlM_</a> :: <a href="../base-4.5.1.0/Control-Monad.html#t:Monad">Monad</a> m =&gt; (a -&gt; b -&gt; m a) -&gt; a -&gt; [b] -&gt; m ()</li><li class="src short"><a href="#v:foldrM">foldrM</a> :: <a href="../base-4.5.1.0/Control-Monad.html#t:Monad">Monad</a> m =&gt; (b -&gt; a -&gt; m a) -&gt; a -&gt; [b] -&gt; m a</li><li class="src short"><a href="#v:maybeMapM">maybeMapM</a> :: <a href="../base-4.5.1.0/Control-Monad.html#t:Monad">Monad</a> m =&gt; (a -&gt; m b) -&gt; <a href="../base-4.5.1.0/Data-Maybe.html#t:Maybe">Maybe</a> a -&gt; m (<a href="../base-4.5.1.0/Data-Maybe.html#t:Maybe">Maybe</a> b)</li></ul></div><div id="interface"><h1>Documentation</h1><div class="top"><p class="src"><span class="keyword">class</span> <a href="../base-4.5.1.0/Control-Monad.html#t:Functor">Functor</a> f =&gt; <a name="t:Applicative" class="def">Applicative</a> f  <span class="keyword">where</span><a href="../base-4.5.1.0/src/Control-Applicative.html#Applicative" class="link">Source</a></p><div class="doc"><p>A functor with application, providing operations to
</p><ul><li> embed pure expressions (<code><a href="MonadUtils.html#v:pure">pure</a></code>), and
</li><li> sequence computations and combine their results (<code><a href="MonadUtils.html#v:-60--42--62-">&lt;*&gt;</a></code>).
</li></ul><p>A minimal complete definition must include implementations of these
 functions satisfying the following laws:
</p><dl><dt><em>identity</em></dt><dd>
      <code><code><a href="MonadUtils.html#v:pure">pure</a></code> <code><a href="../base-4.5.1.0/Control-Category.html#v:id">id</a></code> <code><a href="MonadUtils.html#v:-60--42--62-">&lt;*&gt;</a></code> v = v</code>
</dd><dt><em>composition</em></dt><dd>
      <code><code><a href="MonadUtils.html#v:pure">pure</a></code> (.) <code><a href="MonadUtils.html#v:-60--42--62-">&lt;*&gt;</a></code> u <code><a href="MonadUtils.html#v:-60--42--62-">&lt;*&gt;</a></code> v <code><a href="MonadUtils.html#v:-60--42--62-">&lt;*&gt;</a></code> w = u <code><a href="MonadUtils.html#v:-60--42--62-">&lt;*&gt;</a></code> (v <code><a href="MonadUtils.html#v:-60--42--62-">&lt;*&gt;</a></code> w)</code>
</dd><dt><em>homomorphism</em></dt><dd>
      <code><code><a href="MonadUtils.html#v:pure">pure</a></code> f <code><a href="MonadUtils.html#v:-60--42--62-">&lt;*&gt;</a></code> <code><a href="MonadUtils.html#v:pure">pure</a></code> x = <code><a href="MonadUtils.html#v:pure">pure</a></code> (f x)</code>
</dd><dt><em>interchange</em></dt><dd>
      <code>u <code><a href="MonadUtils.html#v:-60--42--62-">&lt;*&gt;</a></code> <code><a href="MonadUtils.html#v:pure">pure</a></code> y = <code><a href="MonadUtils.html#v:pure">pure</a></code> (<code><a href="../base-4.5.1.0/Prelude.html#v:-36-">$</a></code> y) <code><a href="MonadUtils.html#v:-60--42--62-">&lt;*&gt;</a></code> u</code>
</dd></dl><p>The other methods have the following default definitions, which may
 be overridden with equivalent specialized implementations:
</p><pre>
      u <code><a href="MonadUtils.html#v:-42--62-">*&gt;</a></code> v = <code><a href="MonadUtils.html#v:pure">pure</a></code> (<code><a href="../base-4.5.1.0/Prelude.html#v:const">const</a></code> <code><a href="../base-4.5.1.0/Control-Category.html#v:id">id</a></code>) <code><a href="MonadUtils.html#v:-60--42--62-">&lt;*&gt;</a></code> u <code><a href="MonadUtils.html#v:-60--42--62-">&lt;*&gt;</a></code> v
      u <code><a href="MonadUtils.html#v:-60--42-">&lt;*</a></code> v = <code><a href="MonadUtils.html#v:pure">pure</a></code> <code><a href="../base-4.5.1.0/Prelude.html#v:const">const</a></code> <code><a href="MonadUtils.html#v:-60--42--62-">&lt;*&gt;</a></code> u <code><a href="MonadUtils.html#v:-60--42--62-">&lt;*&gt;</a></code> v
</pre><p>As a consequence of these laws, the <code><a href="../base-4.5.1.0/Control-Monad.html#t:Functor">Functor</a></code> instance for <code>f</code> will satisfy
</p><pre>
      <code><a href="../base-4.5.1.0/Control-Monad.html#v:fmap">fmap</a></code> f x = <code><a href="MonadUtils.html#v:pure">pure</a></code> f <code><a href="MonadUtils.html#v:-60--42--62-">&lt;*&gt;</a></code> x
</pre><p>If <code>f</code> is also a <code><a href="../base-4.5.1.0/Control-Monad.html#t:Monad">Monad</a></code>, it should satisfy <code><code><a href="MonadUtils.html#v:pure">pure</a></code> = <code><a href="../base-4.5.1.0/Control-Monad.html#v:return">return</a></code></code> and
 <code>(<code><a href="MonadUtils.html#v:-60--42--62-">&lt;*&gt;</a></code>) = <code><a href="../base-4.5.1.0/Control-Monad.html#v:ap">ap</a></code></code> (which implies that <code><a href="MonadUtils.html#v:pure">pure</a></code> and <code><a href="MonadUtils.html#v:-60--42--62-">&lt;*&gt;</a></code> satisfy the
 applicative functor laws).
</p></div><div class="subs methods"><p class="caption">Methods</p><p class="src"><a name="v:pure" class="def">pure</a> ::  a -&gt; f a<a href="../base-4.5.1.0/src/Control-Applicative.html#pure" class="link">Source</a></p><div class="doc"><p>Lift a value.
</p></div><p class="src"><a name="v:-60--42--62-" class="def">(&lt;*&gt;)</a> ::  f (a -&gt; b) -&gt; f a -&gt; f b<a href="../base-4.5.1.0/src/Control-Applicative.html#%3C%2A%3E" class="link">Source</a></p><div class="doc"><p>Sequential application.
</p></div><p class="src"><a name="v:-42--62-" class="def">(*&gt;)</a> ::  f a -&gt; f b -&gt; f b<a href="../base-4.5.1.0/src/Control-Applicative.html#%2A%3E" class="link">Source</a></p><div class="doc"><p>Sequence actions, discarding the value of the first argument.
</p></div><p class="src"><a name="v:-60--42-" class="def">(&lt;*)</a> ::  f a -&gt; f b -&gt; f a<a href="../base-4.5.1.0/src/Control-Applicative.html#%3C%2A" class="link">Source</a></p><div class="doc"><p>Sequence actions, discarding the value of the second argument.
</p></div></div><div class="subs instances"><p id="control.i:Applicative" class="caption collapser" onclick="toggleSection('i:Applicative')">Instances</p><div id="section.i:Applicative" class="show"><table><tr><td class="src"><a href="MonadUtils.html#t:Applicative">Applicative</a> []</td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a href="MonadUtils.html#t:Applicative">Applicative</a> <a href="../base-4.5.1.0/System-IO.html#t:IO">IO</a></td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a href="MonadUtils.html#t:Applicative">Applicative</a> <a href="../template-haskell-2.7.0.0/Language-Haskell-TH-Syntax.html#t:Q">Q</a></td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a href="MonadUtils.html#t:Applicative">Applicative</a> <a href="../base-4.5.1.0/Data-Maybe.html#t:Maybe">Maybe</a></td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a href="MonadUtils.html#t:Applicative">Applicative</a> Id</td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a href="MonadUtils.html#t:Applicative">Applicative</a> <a href="../base-4.5.1.0/Control-Applicative.html#t:ZipList">ZipList</a></td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a href="MonadUtils.html#t:Applicative">Applicative</a> <a href="../base-4.5.1.0/GHC-Conc.html#t:STM">STM</a></td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a href="MonadUtils.html#t:Applicative">Applicative</a> Id</td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a href="MonadUtils.html#t:Applicative">Applicative</a> <a href="UniqSupply.html#t:UniqSM">UniqSM</a></td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a href="MonadUtils.html#t:Applicative">Applicative</a> <a href="Pair.html#t:Pair">Pair</a></td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a href="MonadUtils.html#t:Applicative">Applicative</a> <a href="Vectorise-Monad-Base.html#t:VM">VM</a></td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a href="MonadUtils.html#t:Applicative">Applicative</a> <a href="CoreMonad.html#t:CoreM">CoreM</a></td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a href="MonadUtils.html#t:Applicative">Applicative</a> ((-&gt;) a)</td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a href="MonadUtils.html#t:Applicative">Applicative</a> (<a href="../base-4.5.1.0/Data-Either.html#t:Either">Either</a> e)</td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a href="../base-4.5.1.0/Data-Monoid.html#t:Monoid">Monoid</a> a =&gt; <a href="MonadUtils.html#t:Applicative">Applicative</a> ((,) a)</td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a href="MonadUtils.html#t:Applicative">Applicative</a> (<a href="../base-4.5.1.0/Control-Monad-ST-Safe.html#t:ST">ST</a> s)</td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a href="MonadUtils.html#t:Applicative">Applicative</a> (StateL s)</td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a href="MonadUtils.html#t:Applicative">Applicative</a> (StateR s)</td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a href="../base-4.5.1.0/Data-Monoid.html#t:Monoid">Monoid</a> m =&gt; <a href="MonadUtils.html#t:Applicative">Applicative</a> (<a href="../base-4.5.1.0/Control-Applicative.html#t:Const">Const</a> m)</td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a href="../base-4.5.1.0/Control-Monad.html#t:Monad">Monad</a> m =&gt; <a href="MonadUtils.html#t:Applicative">Applicative</a> (<a href="../base-4.5.1.0/Control-Applicative.html#t:WrappedMonad">WrappedMonad</a> m)</td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a href="MonadUtils.html#t:Applicative">Applicative</a> (<a href="../base-4.5.1.0/Control-Monad-ST-Lazy-Safe.html#t:ST">ST</a> s)</td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a href="MonadUtils.html#t:Applicative">Applicative</a> (State s)</td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a href="MonadUtils.html#t:Applicative">Applicative</a> (<a href="State.html#t:State">State</a> s)</td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a href="MonadUtils.html#t:Applicative">Applicative</a> (<a href="IOEnv.html#t:IOEnv">IOEnv</a> m)</td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a href="../base-4.5.1.0/Control-Arrow.html#t:Arrow">Arrow</a> a =&gt; <a href="MonadUtils.html#t:Applicative">Applicative</a> (<a href="../base-4.5.1.0/Control-Applicative.html#t:WrappedArrow">WrappedArrow</a> a b)</td><td class="doc empty">&nbsp;</td></tr></table></div></div></div><div class="top"><p class="src"><a name="v:-60--36--62-" class="def">(&lt;$&gt;)</a> :: <a href="../base-4.5.1.0/Control-Monad.html#t:Functor">Functor</a> f =&gt; (a -&gt; b) -&gt; f a -&gt; f b<a href="../base-4.5.1.0/src/Data-Functor.html#%3C%24%3E" class="link">Source</a></p><div class="doc"><p>An infix synonym for <code><a href="../base-4.5.1.0/Control-Monad.html#v:fmap">fmap</a></code>.
</p></div></div><div class="top"><p class="src"><span class="keyword">class</span> <a href="../base-4.5.1.0/Control-Monad.html#t:Monad">Monad</a> m =&gt; <a name="t:MonadFix" class="def">MonadFix</a> m  <span class="keyword">where</span><a href="../base-4.5.1.0/src/Control-Monad-Fix.html#MonadFix" class="link">Source</a></p><div class="doc"><p>Monads having fixed points with a 'knot-tying' semantics.
 Instances of <code><a href="MonadUtils.html#t:MonadFix">MonadFix</a></code> should satisfy the following laws:
</p><dl><dt><em>purity</em></dt><dd>
      <code><code><a href="MonadUtils.html#v:mfix">mfix</a></code> (<code><a href="../base-4.5.1.0/Control-Monad.html#v:return">return</a></code> . h)  =  <code><a href="../base-4.5.1.0/Control-Monad.html#v:return">return</a></code> (<code><a href="../base-4.5.1.0/Data-Function.html#v:fix">fix</a></code> h)</code>
</dd><dt><em>left shrinking</em> (or <em>tightening</em>)</dt><dd>
      <code><code><a href="MonadUtils.html#v:mfix">mfix</a></code> (\x -&gt; a &gt;&gt;= \y -&gt; f x y)  =  a &gt;&gt;= \y -&gt; <code><a href="MonadUtils.html#v:mfix">mfix</a></code> (\x -&gt; f x y)</code>
</dd><dt><em>sliding</em></dt><dd>
      <code><code><a href="MonadUtils.html#v:mfix">mfix</a></code> (<code><a href="../base-4.5.1.0/Control-Monad.html#v:liftM">liftM</a></code> h . f)  =  <code><a href="../base-4.5.1.0/Control-Monad.html#v:liftM">liftM</a></code> h (<code><a href="MonadUtils.html#v:mfix">mfix</a></code> (f . h))</code>,
      for strict <code>h</code>.
</dd><dt><em>nesting</em></dt><dd>
      <code><code><a href="MonadUtils.html#v:mfix">mfix</a></code> (\x -&gt; <code><a href="MonadUtils.html#v:mfix">mfix</a></code> (\y -&gt; f x y))  =  <code><a href="MonadUtils.html#v:mfix">mfix</a></code> (\x -&gt; f x x)</code>
</dd></dl><p>This class is used in the translation of the recursive <code>do</code> notation
 supported by GHC and Hugs.
</p></div><div class="subs methods"><p class="caption">Methods</p><p class="src"><a name="v:mfix" class="def">mfix</a> ::  (a -&gt; m a) -&gt; m a<a href="../base-4.5.1.0/src/Control-Monad-Fix.html#mfix" class="link">Source</a></p><div class="doc"><p>The fixed point of a monadic computation.
 <code><code><a href="MonadUtils.html#v:mfix">mfix</a></code> f</code> executes the action <code>f</code> only once, with the eventual
 output fed back as the input.  Hence <code>f</code> should not be strict,
 for then <code><code><a href="MonadUtils.html#v:mfix">mfix</a></code> f</code> would diverge.
</p></div></div><div class="subs instances"><p id="control.i:MonadFix" class="caption collapser" onclick="toggleSection('i:MonadFix')">Instances</p><div id="section.i:MonadFix" class="show"><table><tr><td class="src"><a href="MonadUtils.html#t:MonadFix">MonadFix</a> []</td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a href="MonadUtils.html#t:MonadFix">MonadFix</a> <a href="../base-4.5.1.0/System-IO.html#t:IO">IO</a></td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a href="MonadUtils.html#t:MonadFix">MonadFix</a> <a href="../base-4.5.1.0/Data-Maybe.html#t:Maybe">Maybe</a></td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a href="MonadUtils.html#t:MonadFix">MonadFix</a> <a href="UniqSupply.html#t:UniqSM">UniqSM</a></td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a href="MonadUtils.html#t:MonadFix">MonadFix</a> <a href="GhcMonad.html#t:Ghc">Ghc</a></td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a href="MonadUtils.html#t:MonadFix">MonadFix</a> LneM</td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a href="MonadUtils.html#t:MonadFix">MonadFix</a> ((-&gt;) r)</td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a href="MonadUtils.html#t:MonadFix">MonadFix</a> (<a href="../base-4.5.1.0/Data-Either.html#t:Either">Either</a> e)</td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a href="MonadUtils.html#t:MonadFix">MonadFix</a> (<a href="../base-4.5.1.0/Control-Monad-ST-Safe.html#t:ST">ST</a> s)</td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a href="MonadUtils.html#t:MonadFix">MonadFix</a> (<a href="../base-4.5.1.0/Control-Monad-ST-Lazy-Safe.html#t:ST">ST</a> s)</td><td class="doc empty">&nbsp;</td></tr></table></div></div></div><div class="top"><p class="src"><span class="keyword">class</span> <a href="../base-4.5.1.0/Control-Monad.html#t:Monad">Monad</a> m =&gt; <a name="t:MonadIO" class="def">MonadIO</a> m  <span class="keyword">where</span></p><div class="subs methods"><p class="caption">Methods</p><p class="src"><a name="v:liftIO" class="def">liftIO</a> ::  <a href="../base-4.5.1.0/System-IO.html#t:IO">IO</a> a -&gt; m a</p></div><div class="subs instances"><p id="control.i:MonadIO" class="caption collapser" onclick="toggleSection('i:MonadIO')">Instances</p><div id="section.i:MonadIO" class="show"><table><tr><td class="src"><a href="MonadUtils.html#t:MonadIO">MonadIO</a> <a href="../base-4.5.1.0/System-IO.html#t:IO">IO</a></td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a href="MonadUtils.html#t:MonadIO">MonadIO</a> <a href="GhcMonad.html#t:Ghc">Ghc</a></td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a href="MonadUtils.html#t:MonadIO">MonadIO</a> <a href="Vectorise-Monad-Base.html#t:VM">VM</a></td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a href="MonadUtils.html#t:MonadIO">MonadIO</a> <a href="CoreMonad.html#t:CoreM">CoreM</a></td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a href="MonadUtils.html#t:MonadIO">MonadIO</a> Hsc</td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a href="MonadUtils.html#t:MonadIO">MonadIO</a> (<a href="IOEnv.html#t:IOEnv">IOEnv</a> env)</td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a href="MonadUtils.html#t:MonadIO">MonadIO</a> m =&gt; <a href="MonadUtils.html#t:MonadIO">MonadIO</a> (<a href="GhcMonad.html#t:GhcT">GhcT</a> m)</td><td class="doc empty">&nbsp;</td></tr></table></div></div></div><div class="top"><p class="src"><span class="keyword">data</span>  <a name="t:ID" class="def">ID</a> a </p><div class="subs instances"><p id="control.i:ID" class="caption collapser" onclick="toggleSection('i:ID')">Instances</p><div id="section.i:ID" class="show"><table><tr><td class="src"><a href="../base-4.5.1.0/Control-Monad.html#t:Monad">Monad</a> <a href="MonadUtils.html#t:ID">ID</a></td><td class="doc empty">&nbsp;</td></tr></table></div></div></div><div class="top"><p class="src"><a name="v:runID" class="def">runID</a> ::  <a href="MonadUtils.html#t:ID">ID</a> a -&gt; a</p></div><div class="top"><p class="src"><a name="v:liftIO1" class="def">liftIO1</a> :: <a href="MonadUtils.html#t:MonadIO">MonadIO</a> m =&gt; (a -&gt; <a href="../base-4.5.1.0/System-IO.html#t:IO">IO</a> b) -&gt; a -&gt; m b</p><div class="doc"><p>Lift an <code><a href="../base-4.5.1.0/System-IO.html#t:IO">IO</a></code> operation with 1 argument into another monad
</p></div></div><div class="top"><p class="src"><a name="v:liftIO2" class="def">liftIO2</a> :: <a href="MonadUtils.html#t:MonadIO">MonadIO</a> m =&gt; (a -&gt; b -&gt; <a href="../base-4.5.1.0/System-IO.html#t:IO">IO</a> c) -&gt; a -&gt; b -&gt; m c</p><div class="doc"><p>Lift an <code><a href="../base-4.5.1.0/System-IO.html#t:IO">IO</a></code> operation with 2 arguments into another monad
</p></div></div><div class="top"><p class="src"><a name="v:liftIO3" class="def">liftIO3</a> :: <a href="MonadUtils.html#t:MonadIO">MonadIO</a> m =&gt; (a -&gt; b -&gt; c -&gt; <a href="../base-4.5.1.0/System-IO.html#t:IO">IO</a> d) -&gt; a -&gt; b -&gt; c -&gt; m d</p><div class="doc"><p>Lift an <code><a href="../base-4.5.1.0/System-IO.html#t:IO">IO</a></code> operation with 3 arguments into another monad
</p></div></div><div class="top"><p class="src"><a name="v:liftIO4" class="def">liftIO4</a> :: <a href="MonadUtils.html#t:MonadIO">MonadIO</a> m =&gt; (a -&gt; b -&gt; c -&gt; d -&gt; <a href="../base-4.5.1.0/System-IO.html#t:IO">IO</a> e) -&gt; a -&gt; b -&gt; c -&gt; d -&gt; m e</p><div class="doc"><p>Lift an <code><a href="../base-4.5.1.0/System-IO.html#t:IO">IO</a></code> operation with 4 arguments into another monad
</p></div></div><div class="top"><p class="src"><a name="v:zipWith3M" class="def">zipWith3M</a> :: <a href="../base-4.5.1.0/Control-Monad.html#t:Monad">Monad</a> m =&gt; (a -&gt; b -&gt; c -&gt; m d) -&gt; [a] -&gt; [b] -&gt; [c] -&gt; m [d]</p></div><div class="top"><p class="src"><a name="v:mapAndUnzipM" class="def">mapAndUnzipM</a> :: <a href="../base-4.5.1.0/Control-Monad.html#t:Monad">Monad</a> m =&gt; (a -&gt; m (b, c)) -&gt; [a] -&gt; m ([b], [c])<a href="../base-4.5.1.0/src/Control-Monad.html#mapAndUnzipM" class="link">Source</a></p><div class="doc"><p>The <code><a href="MonadUtils.html#v:mapAndUnzipM">mapAndUnzipM</a></code> 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.
</p></div></div><div class="top"><p class="src"><a name="v:mapAndUnzip3M" class="def">mapAndUnzip3M</a> :: <a href="../base-4.5.1.0/Control-Monad.html#t:Monad">Monad</a> m =&gt; (a -&gt; m (b, c, d)) -&gt; [a] -&gt; m ([b], [c], [d])</p><div class="doc"><p>mapAndUnzipM for triples
</p></div></div><div class="top"><p class="src"><a name="v:mapAndUnzip4M" class="def">mapAndUnzip4M</a> :: <a href="../base-4.5.1.0/Control-Monad.html#t:Monad">Monad</a> m =&gt; (a -&gt; m (b, c, d, e)) -&gt; [a] -&gt; m ([b], [c], [d], [e])</p></div><div class="top"><p class="src"><a name="v:mapAccumLM" class="def">mapAccumLM</a></p><div class="subs arguments"><p class="caption">Arguments</p><table><tr><td class="src">:: <a href="../base-4.5.1.0/Control-Monad.html#t:Monad">Monad</a> m</td><td class="doc empty">&nbsp;</td></tr><tr><td class="src">=&gt; (acc -&gt; x -&gt; m (acc, y))</td><td class="doc"><p>combining funcction
</p></td></tr><tr><td class="src">-&gt; acc</td><td class="doc"><p>initial state
</p></td></tr><tr><td class="src">-&gt; [x]</td><td class="doc"><p>inputs
</p></td></tr><tr><td class="src">-&gt; m (acc, [y])</td><td class="doc"><p>final state, outputs
</p></td></tr></table></div><div class="doc"><p>Monadic version of mapAccumL
</p></div></div><div class="top"><p class="src"><a name="v:mapSndM" class="def">mapSndM</a> :: <a href="../base-4.5.1.0/Control-Monad.html#t:Monad">Monad</a> m =&gt; (b -&gt; m c) -&gt; [(a, b)] -&gt; m [(a, c)]</p><div class="doc"><p>Monadic version of mapSnd
</p></div></div><div class="top"><p class="src"><a name="v:concatMapM" class="def">concatMapM</a> :: <a href="../base-4.5.1.0/Control-Monad.html#t:Monad">Monad</a> m =&gt; (a -&gt; m [b]) -&gt; [a] -&gt; m [b]</p><div class="doc"><p>Monadic version of concatMap
</p></div></div><div class="top"><p class="src"><a name="v:mapMaybeM" class="def">mapMaybeM</a> :: <a href="../base-4.5.1.0/Control-Monad.html#t:Monad">Monad</a> m =&gt; (a -&gt; m (<a href="../base-4.5.1.0/Data-Maybe.html#t:Maybe">Maybe</a> b)) -&gt; [a] -&gt; m [b]</p><div class="doc"><p>Monadic version of mapMaybe
</p></div></div><div class="top"><p class="src"><a name="v:fmapMaybeM" class="def">fmapMaybeM</a> :: <a href="../base-4.5.1.0/Control-Monad.html#t:Monad">Monad</a> m =&gt; (a -&gt; m b) -&gt; <a href="../base-4.5.1.0/Data-Maybe.html#t:Maybe">Maybe</a> a -&gt; m (<a href="../base-4.5.1.0/Data-Maybe.html#t:Maybe">Maybe</a> b)</p><div class="doc"><p>Monadic version of fmap
</p></div></div><div class="top"><p class="src"><a name="v:fmapEitherM" class="def">fmapEitherM</a> :: <a href="../base-4.5.1.0/Control-Monad.html#t:Monad">Monad</a> m =&gt; (a -&gt; m b) -&gt; (c -&gt; m d) -&gt; <a href="../base-4.5.1.0/Data-Either.html#t:Either">Either</a> a c -&gt; m (<a href="../base-4.5.1.0/Data-Either.html#t:Either">Either</a> b d)</p><div class="doc"><p>Monadic version of fmap
</p></div></div><div class="top"><p class="src"><a name="v:anyM" class="def">anyM</a> :: <a href="../base-4.5.1.0/Control-Monad.html#t:Monad">Monad</a> m =&gt; (a -&gt; m <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a>) -&gt; [a] -&gt; m <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></p><div class="doc"><p>Monadic version of <code><a href="../base-4.5.1.0/Data-List.html#v:any">any</a></code>, aborts the computation at the first <code>True</code> value
</p></div></div><div class="top"><p class="src"><a name="v:allM" class="def">allM</a> :: <a href="../base-4.5.1.0/Control-Monad.html#t:Monad">Monad</a> m =&gt; (a -&gt; m <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a>) -&gt; [a] -&gt; m <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></p><div class="doc"><p>Monad version of <code><a href="../base-4.5.1.0/Data-List.html#v:all">all</a></code>, aborts the computation at the first <code>False</code> value
</p></div></div><div class="top"><p class="src"><a name="v:foldlM" class="def">foldlM</a> :: <a href="../base-4.5.1.0/Control-Monad.html#t:Monad">Monad</a> m =&gt; (a -&gt; b -&gt; m a) -&gt; a -&gt; [b] -&gt; m a</p><div class="doc"><p>Monadic version of foldl
</p></div></div><div class="top"><p class="src"><a name="v:foldlM_" class="def">foldlM_</a> :: <a href="../base-4.5.1.0/Control-Monad.html#t:Monad">Monad</a> m =&gt; (a -&gt; b -&gt; m a) -&gt; a -&gt; [b] -&gt; m ()</p><div class="doc"><p>Monadic version of foldl that discards its result
</p></div></div><div class="top"><p class="src"><a name="v:foldrM" class="def">foldrM</a> :: <a href="../base-4.5.1.0/Control-Monad.html#t:Monad">Monad</a> m =&gt; (b -&gt; a -&gt; m a) -&gt; a -&gt; [b] -&gt; m a</p><div class="doc"><p>Monadic version of foldr
</p></div></div><div class="top"><p class="src"><a name="v:maybeMapM" class="def">maybeMapM</a> :: <a href="../base-4.5.1.0/Control-Monad.html#t:Monad">Monad</a> m =&gt; (a -&gt; m b) -&gt; <a href="../base-4.5.1.0/Data-Maybe.html#t:Maybe">Maybe</a> a -&gt; m (<a href="../base-4.5.1.0/Data-Maybe.html#t:Maybe">Maybe</a> b)</p><div class="doc"><p>Monadic version of fmap specialised for Maybe
</p></div></div></div></div><div id="footer"><p>Produced by <a href="http://www.haskell.org/haddock/">Haddock</a> version 2.11.0</p></div></body></html>