Sophie

Sophie

distrib > Fedora > 15 > i386 > by-pkgid > f594880e2863b9860a125653c32b1fa6 > files > 81

ghc-transformers-devel-0.2.2.0-10.fc15.i686.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>Control.Monad.Trans.Cont</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_Control-Monad-Trans-Cont.html");};
//]]>
</script></head><body><div id="package-header"><ul class="links" id="page-menu"><li><a href="src/Control-Monad-Trans-Cont.html">Source</a></li><li><a href="index.html">Contents</a></li><li><a href="doc-index.html">Index</a></li></ul><p class="caption">transformers-0.2.2.0: Concrete functor and monad transformers</p></div><div id="content"><div id="module-header"><table class="info"><tr><th>Portability</th><td>portable</td></tr><tr><th>Stability</th><td>experimental</td></tr><tr><th>Maintainer</th><td>ross@soi.city.ac.uk</td></tr></table><p class="caption">Control.Monad.Trans.Cont</p></div><div id="table-of-contents"><p class="caption">Contents</p><ul><li><a href="#g:1">The Cont monad
</a></li><li><a href="#g:2">The ContT monad transformer
</a></li><li><a href="#g:3">Lifting other operations
</a></li></ul></div><div id="description"><p class="caption">Description</p><div class="doc"><p>Continuation monads.
</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">type</span> <a href="#t:Cont">Cont</a> r = <a href="Control-Monad-Trans-Cont.html#t:ContT">ContT</a> r <a href="Data-Functor-Identity.html#t:Identity">Identity</a></li><li class="src short"><a href="#v:cont">cont</a> ::  ((a -&gt; r) -&gt; r) -&gt; <a href="Control-Monad-Trans-Cont.html#t:Cont">Cont</a> r a</li><li class="src short"><a href="#v:runCont">runCont</a> ::  <a href="Control-Monad-Trans-Cont.html#t:Cont">Cont</a> r a -&gt; (a -&gt; r) -&gt; r</li><li class="src short"><a href="#v:mapCont">mapCont</a> ::  (r -&gt; r) -&gt; <a href="Control-Monad-Trans-Cont.html#t:Cont">Cont</a> r a -&gt; <a href="Control-Monad-Trans-Cont.html#t:Cont">Cont</a> r a</li><li class="src short"><a href="#v:withCont">withCont</a> ::  ((b -&gt; r) -&gt; a -&gt; r) -&gt; <a href="Control-Monad-Trans-Cont.html#t:Cont">Cont</a> r a -&gt; <a href="Control-Monad-Trans-Cont.html#t:Cont">Cont</a> r b</li><li class="src short"><span class="keyword">newtype</span>  <a href="#t:ContT">ContT</a> r m a = <a href="#v:ContT">ContT</a> {<ul class="subs"><li><a href="#v:runContT">runContT</a> :: (a -&gt; m r) -&gt; m r</li></ul>}</li><li class="src short"><a href="#v:mapContT">mapContT</a> ::  (m r -&gt; m r) -&gt; <a href="Control-Monad-Trans-Cont.html#t:ContT">ContT</a> r m a -&gt; <a href="Control-Monad-Trans-Cont.html#t:ContT">ContT</a> r m a</li><li class="src short"><a href="#v:withContT">withContT</a> ::  ((b -&gt; m r) -&gt; a -&gt; m r) -&gt; <a href="Control-Monad-Trans-Cont.html#t:ContT">ContT</a> r m a -&gt; <a href="Control-Monad-Trans-Cont.html#t:ContT">ContT</a> r m b</li><li class="src short"><a href="#v:callCC">callCC</a> ::  ((a -&gt; <a href="Control-Monad-Trans-Cont.html#t:ContT">ContT</a> r m b) -&gt; <a href="Control-Monad-Trans-Cont.html#t:ContT">ContT</a> r m a) -&gt; <a href="Control-Monad-Trans-Cont.html#t:ContT">ContT</a> r m a</li><li class="src short"><a href="#v:liftLocal">liftLocal</a> :: <a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Control-Monad.html#t:Monad">Monad</a> m =&gt; m r' -&gt; ((r' -&gt; r') -&gt; m r -&gt; m r) -&gt; (r' -&gt; r') -&gt; <a href="Control-Monad-Trans-Cont.html#t:ContT">ContT</a> r m a -&gt; <a href="Control-Monad-Trans-Cont.html#t:ContT">ContT</a> r m a</li></ul></div><div id="interface"><h1 id="g:1">The Cont monad
</h1><div class="top"><p class="src"><span class="keyword">type</span> <a name="t:Cont" class="def">Cont</a> r = <a href="Control-Monad-Trans-Cont.html#t:ContT">ContT</a> r <a href="Data-Functor-Identity.html#t:Identity">Identity</a><a href="src/Control-Monad-Trans-Cont.html#Cont" class="link">Source</a></p><div class="doc"><p>Continuation monad.
<code>Cont r a</code> is a CPS computation that produces an intermediate result
of type <code>a</code> within a CPS computation whose final result type is <code>r</code>.
</p><p>The <code>return</code> function simply creates a continuation which passes the value on.
</p><p>The <code>&gt;&gt;=</code> operator adds the bound function into the continuation chain.
</p></div></div><div class="top"><p class="src"><a name="v:cont" class="def">cont</a> ::  ((a -&gt; r) -&gt; r) -&gt; <a href="Control-Monad-Trans-Cont.html#t:Cont">Cont</a> r a<a href="src/Control-Monad-Trans-Cont.html#cont" class="link">Source</a></p><div class="doc"><p>Construct a continuation-passing computation from a function.
 (The inverse of <code><a href="Control-Monad-Trans-Cont.html#v:runCont">runCont</a></code>.)
</p></div></div><div class="top"><p class="src"><a name="v:runCont" class="def">runCont</a><a href="src/Control-Monad-Trans-Cont.html#runCont" class="link">Source</a></p><div class="subs arguments"><p class="caption">Arguments</p><table><tr><td class="src">:: <a href="Control-Monad-Trans-Cont.html#t:Cont">Cont</a> r a</td><td class="doc"><p>continuation computation (<code>Cont</code>).
</p></td></tr><tr><td class="src">-&gt; (a -&gt; r)</td><td class="doc"><p>the final continuation, which produces
 the final result (often <code><a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Prelude.html#v:id">id</a></code>).
</p></td></tr><tr><td class="src">-&gt; r</td><td class="doc empty">&nbsp;</td></tr></table></div><div class="doc"><p>Runs a CPS computation, returns its result after applying the final
 continuation to it.
 (The inverse of <code><a href="Control-Monad-Trans-Cont.html#v:cont">cont</a></code>.)
</p></div></div><div class="top"><p class="src"><a name="v:mapCont" class="def">mapCont</a> ::  (r -&gt; r) -&gt; <a href="Control-Monad-Trans-Cont.html#t:Cont">Cont</a> r a -&gt; <a href="Control-Monad-Trans-Cont.html#t:Cont">Cont</a> r a<a href="src/Control-Monad-Trans-Cont.html#mapCont" class="link">Source</a></p></div><div class="top"><p class="src"><a name="v:withCont" class="def">withCont</a> ::  ((b -&gt; r) -&gt; a -&gt; r) -&gt; <a href="Control-Monad-Trans-Cont.html#t:Cont">Cont</a> r a -&gt; <a href="Control-Monad-Trans-Cont.html#t:Cont">Cont</a> r b<a href="src/Control-Monad-Trans-Cont.html#withCont" class="link">Source</a></p></div><h1 id="g:2">The ContT monad transformer
</h1><div class="top"><p class="src"><span class="keyword">newtype</span>  <a name="t:ContT" class="def">ContT</a> r m a <a href="src/Control-Monad-Trans-Cont.html#ContT" class="link">Source</a></p><div class="doc"><p>The continuation monad transformer.
Can be used to add continuation handling to other monads.
</p></div><div class="subs constructors"><p class="caption">Constructors</p><table><tr><td class="src"><a name="v:ContT" class="def">ContT</a></td><td class="doc empty">&nbsp;</td></tr><tr><td colspan="2"><div class="subs fields"><p class="caption">Fields</p><dl><dt class="src"><a name="v:runContT" class="def">runContT</a> :: (a -&gt; m r) -&gt; m r</dt><dd class="doc empty">&nbsp;</dd></dl><div class="clear"></div></div></td></tr></table></div><div class="subs instances"><p id="control.i:ContT" class="caption collapser" onclick="toggleSection('i:ContT')">Instances</p><div id="section.i:ContT" class="show"><table><tr><td class="src"><a href="Control-Monad-Trans-Class.html#t:MonadTrans">MonadTrans</a> (<a href="Control-Monad-Trans-Cont.html#t:ContT">ContT</a> r)</td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Control-Monad.html#t:Monad">Monad</a> (<a href="Control-Monad-Trans-Cont.html#t:ContT">ContT</a> r m)</td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Control-Monad.html#t:Functor">Functor</a> (<a href="Control-Monad-Trans-Cont.html#t:ContT">ContT</a> r m)</td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Control-Applicative.html#t:Applicative">Applicative</a> (<a href="Control-Monad-Trans-Cont.html#t:ContT">ContT</a> r m)</td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a href="Control-Monad-IO-Class.html#t:MonadIO">MonadIO</a> m =&gt; <a href="Control-Monad-IO-Class.html#t:MonadIO">MonadIO</a> (<a href="Control-Monad-Trans-Cont.html#t:ContT">ContT</a> r m)</td><td class="doc empty">&nbsp;</td></tr></table></div></div></div><div class="top"><p class="src"><a name="v:mapContT" class="def">mapContT</a> ::  (m r -&gt; m r) -&gt; <a href="Control-Monad-Trans-Cont.html#t:ContT">ContT</a> r m a -&gt; <a href="Control-Monad-Trans-Cont.html#t:ContT">ContT</a> r m a<a href="src/Control-Monad-Trans-Cont.html#mapContT" class="link">Source</a></p></div><div class="top"><p class="src"><a name="v:withContT" class="def">withContT</a> ::  ((b -&gt; m r) -&gt; a -&gt; m r) -&gt; <a href="Control-Monad-Trans-Cont.html#t:ContT">ContT</a> r m a -&gt; <a href="Control-Monad-Trans-Cont.html#t:ContT">ContT</a> r m b<a href="src/Control-Monad-Trans-Cont.html#withContT" class="link">Source</a></p></div><div class="top"><p class="src"><a name="v:callCC" class="def">callCC</a> ::  ((a -&gt; <a href="Control-Monad-Trans-Cont.html#t:ContT">ContT</a> r m b) -&gt; <a href="Control-Monad-Trans-Cont.html#t:ContT">ContT</a> r m a) -&gt; <a href="Control-Monad-Trans-Cont.html#t:ContT">ContT</a> r m a<a href="src/Control-Monad-Trans-Cont.html#callCC" class="link">Source</a></p><div class="doc"><p><code>callCC</code> (call-with-current-continuation) calls its argument
 function, passing it the current continuation.  It provides
 an escape continuation mechanism for use with continuation
 monads.  Escape continuations one allow to abort the current
 computation and return a value immediately.  They achieve a
 similar effect to <code>Control.Monad.Trans.Error.throwError</code>
 and <code>Control.Monad.Trans.Error.catchError</code> within an
 <code>Control.Monad.Trans.Error.ErrorT</code> monad.  The advantage of this
 function over calling <code><a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Control-Monad.html#v:return">return</a></code> is that it makes the continuation
 explicit, allowing more flexibility and better control.
</p><p>The standard idiom used with <code>callCC</code> is to provide a lambda-expression
 to name the continuation. Then calling the named continuation anywhere
 within its scope will escape from the computation, even if it is many
 layers deep within nested computations.
</p></div></div><h1 id="g:3">Lifting other operations
</h1><div class="top"><p class="src"><a name="v:liftLocal" class="def">liftLocal</a> :: <a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Control-Monad.html#t:Monad">Monad</a> m =&gt; m r' -&gt; ((r' -&gt; r') -&gt; m r -&gt; m r) -&gt; (r' -&gt; r') -&gt; <a href="Control-Monad-Trans-Cont.html#t:ContT">ContT</a> r m a -&gt; <a href="Control-Monad-Trans-Cont.html#t:ContT">ContT</a> r m a<a href="src/Control-Monad-Trans-Cont.html#liftLocal" class="link">Source</a></p><div class="doc"><p><code><code><a href="Control-Monad-Trans-Cont.html#v:liftLocal">liftLocal</a></code> ask local</code> yields a <code>local</code> function for <code><code><a href="Control-Monad-Trans-Cont.html#t:ContT">ContT</a></code> r m</code>.
</p></div></div></div></div><div id="footer"><p>Produced by <a href="http://www.haskell.org/haddock/">Haddock</a> version 2.9.2</p></div></body></html>