<!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 => <a href="#t:Applicative">Applicative</a> f <span class="keyword">where</span><ul class="subs"><li><a href="#v:pure">pure</a> :: a -> f a</li><li><a href="#v:-60--42--62-">(<*>)</a> :: f (a -> b) -> f a -> f b</li><li><a href="#v:-42--62-">(*>)</a> :: f a -> f b -> f b</li><li><a href="#v:-60--42-">(<*)</a> :: f a -> f b -> f a</li></ul></li><li class="src short"><a href="#v:-60--36--62-">(<$>)</a> :: <a href="../base-4.5.1.0/Control-Monad.html#t:Functor">Functor</a> f => (a -> b) -> f a -> 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 => <a href="#t:MonadFix">MonadFix</a> m <span class="keyword">where</span><ul class="subs"><li><a href="#v:mfix">mfix</a> :: (a -> m a) -> 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 => <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 -> 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 -> a</li><li class="src short"><a href="#v:liftIO1">liftIO1</a> :: <a href="MonadUtils.html#t:MonadIO">MonadIO</a> m => (a -> <a href="../base-4.5.1.0/System-IO.html#t:IO">IO</a> b) -> a -> m b</li><li class="src short"><a href="#v:liftIO2">liftIO2</a> :: <a href="MonadUtils.html#t:MonadIO">MonadIO</a> m => (a -> b -> <a href="../base-4.5.1.0/System-IO.html#t:IO">IO</a> c) -> a -> b -> m c</li><li class="src short"><a href="#v:liftIO3">liftIO3</a> :: <a href="MonadUtils.html#t:MonadIO">MonadIO</a> m => (a -> b -> c -> <a href="../base-4.5.1.0/System-IO.html#t:IO">IO</a> d) -> a -> b -> c -> m d</li><li class="src short"><a href="#v:liftIO4">liftIO4</a> :: <a href="MonadUtils.html#t:MonadIO">MonadIO</a> m => (a -> b -> c -> d -> <a href="../base-4.5.1.0/System-IO.html#t:IO">IO</a> e) -> a -> b -> c -> d -> 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 => (a -> b -> c -> m d) -> [a] -> [b] -> [c] -> 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 => (a -> m (b, c)) -> [a] -> 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 => (a -> m (b, c, d)) -> [a] -> 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 => (a -> m (b, c, d, e)) -> [a] -> 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 => (acc -> x -> m (acc, y)) -> acc -> [x] -> 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 => (b -> m c) -> [(a, b)] -> 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 => (a -> m [b]) -> [a] -> 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 => (a -> m (<a href="../base-4.5.1.0/Data-Maybe.html#t:Maybe">Maybe</a> b)) -> [a] -> 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 => (a -> m b) -> <a href="../base-4.5.1.0/Data-Maybe.html#t:Maybe">Maybe</a> a -> 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 => (a -> m b) -> (c -> m d) -> <a href="../base-4.5.1.0/Data-Either.html#t:Either">Either</a> a c -> 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 => (a -> m <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a>) -> [a] -> 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 => (a -> m <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a>) -> [a] -> 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 => (a -> b -> m a) -> a -> [b] -> 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 => (a -> b -> m a) -> a -> [b] -> 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 => (b -> a -> m a) -> a -> [b] -> 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 => (a -> m b) -> <a href="../base-4.5.1.0/Data-Maybe.html#t:Maybe">Maybe</a> a -> 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 => <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-"><*></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-"><*></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-"><*></a></code> u <code><a href="MonadUtils.html#v:-60--42--62-"><*></a></code> v <code><a href="MonadUtils.html#v:-60--42--62-"><*></a></code> w = u <code><a href="MonadUtils.html#v:-60--42--62-"><*></a></code> (v <code><a href="MonadUtils.html#v:-60--42--62-"><*></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-"><*></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-"><*></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-"><*></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-">*></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-"><*></a></code> u <code><a href="MonadUtils.html#v:-60--42--62-"><*></a></code> v u <code><a href="MonadUtils.html#v:-60--42-"><*</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-"><*></a></code> u <code><a href="MonadUtils.html#v:-60--42--62-"><*></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-"><*></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-"><*></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-"><*></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 -> 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">(<*>)</a> :: f (a -> b) -> f a -> 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">(*>)</a> :: f a -> f b -> 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">(<*)</a> :: f a -> f b -> 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"> </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"> </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"> </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"> </td></tr><tr><td class="src"><a href="MonadUtils.html#t:Applicative">Applicative</a> Id</td><td class="doc empty"> </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"> </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"> </td></tr><tr><td class="src"><a href="MonadUtils.html#t:Applicative">Applicative</a> Id</td><td class="doc empty"> </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"> </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"> </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"> </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"> </td></tr><tr><td class="src"><a href="MonadUtils.html#t:Applicative">Applicative</a> ((->) a)</td><td class="doc empty"> </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"> </td></tr><tr><td class="src"><a href="../base-4.5.1.0/Data-Monoid.html#t:Monoid">Monoid</a> a => <a href="MonadUtils.html#t:Applicative">Applicative</a> ((,) a)</td><td class="doc empty"> </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"> </td></tr><tr><td class="src"><a href="MonadUtils.html#t:Applicative">Applicative</a> (StateL s)</td><td class="doc empty"> </td></tr><tr><td class="src"><a href="MonadUtils.html#t:Applicative">Applicative</a> (StateR s)</td><td class="doc empty"> </td></tr><tr><td class="src"><a href="../base-4.5.1.0/Data-Monoid.html#t:Monoid">Monoid</a> m => <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"> </td></tr><tr><td class="src"><a href="../base-4.5.1.0/Control-Monad.html#t:Monad">Monad</a> m => <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"> </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"> </td></tr><tr><td class="src"><a href="MonadUtils.html#t:Applicative">Applicative</a> (State s)</td><td class="doc empty"> </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"> </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"> </td></tr><tr><td class="src"><a href="../base-4.5.1.0/Control-Arrow.html#t:Arrow">Arrow</a> a => <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"> </td></tr></table></div></div></div><div class="top"><p class="src"><a name="v:-60--36--62-" class="def">(<$>)</a> :: <a href="../base-4.5.1.0/Control-Monad.html#t:Functor">Functor</a> f => (a -> b) -> f a -> 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 => <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 -> a >>= \y -> f x y) = a >>= \y -> <code><a href="MonadUtils.html#v:mfix">mfix</a></code> (\x -> 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 -> <code><a href="MonadUtils.html#v:mfix">mfix</a></code> (\y -> f x y)) = <code><a href="MonadUtils.html#v:mfix">mfix</a></code> (\x -> 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 -> m a) -> 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"> </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"> </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"> </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"> </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"> </td></tr><tr><td class="src"><a href="MonadUtils.html#t:MonadFix">MonadFix</a> LneM</td><td class="doc empty"> </td></tr><tr><td class="src"><a href="MonadUtils.html#t:MonadFix">MonadFix</a> ((->) r)</td><td class="doc empty"> </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"> </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"> </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"> </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 => <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 -> 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"> </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"> </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"> </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"> </td></tr><tr><td class="src"><a href="MonadUtils.html#t:MonadIO">MonadIO</a> Hsc</td><td class="doc empty"> </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"> </td></tr><tr><td class="src"><a href="MonadUtils.html#t:MonadIO">MonadIO</a> m => <a href="MonadUtils.html#t:MonadIO">MonadIO</a> (<a href="GhcMonad.html#t:GhcT">GhcT</a> m)</td><td class="doc empty"> </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"> </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 -> 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 => (a -> <a href="../base-4.5.1.0/System-IO.html#t:IO">IO</a> b) -> a -> 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 => (a -> b -> <a href="../base-4.5.1.0/System-IO.html#t:IO">IO</a> c) -> a -> b -> 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 => (a -> b -> c -> <a href="../base-4.5.1.0/System-IO.html#t:IO">IO</a> d) -> a -> b -> c -> 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 => (a -> b -> c -> d -> <a href="../base-4.5.1.0/System-IO.html#t:IO">IO</a> e) -> a -> b -> c -> d -> 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 => (a -> b -> c -> m d) -> [a] -> [b] -> [c] -> 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 => (a -> m (b, c)) -> [a] -> 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 => (a -> m (b, c, d)) -> [a] -> 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 => (a -> m (b, c, d, e)) -> [a] -> 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"> </td></tr><tr><td class="src">=> (acc -> x -> m (acc, y))</td><td class="doc"><p>combining funcction </p></td></tr><tr><td class="src">-> acc</td><td class="doc"><p>initial state </p></td></tr><tr><td class="src">-> [x]</td><td class="doc"><p>inputs </p></td></tr><tr><td class="src">-> 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 => (b -> m c) -> [(a, b)] -> 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 => (a -> m [b]) -> [a] -> 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 => (a -> m (<a href="../base-4.5.1.0/Data-Maybe.html#t:Maybe">Maybe</a> b)) -> [a] -> 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 => (a -> m b) -> <a href="../base-4.5.1.0/Data-Maybe.html#t:Maybe">Maybe</a> a -> 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 => (a -> m b) -> (c -> m d) -> <a href="../base-4.5.1.0/Data-Either.html#t:Either">Either</a> a c -> 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 => (a -> m <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a>) -> [a] -> 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 => (a -> m <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a>) -> [a] -> 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 => (a -> b -> m a) -> a -> [b] -> 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 => (a -> b -> m a) -> a -> [b] -> 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 => (b -> a -> m a) -> a -> [b] -> 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 => (a -> m b) -> <a href="../base-4.5.1.0/Data-Maybe.html#t:Maybe">Maybe</a> a -> 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>