<!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.Exception.Lifted</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-Exception-Lifted.html");}; //]]> </script></head><body><div id="package-header"><ul class="links" id="page-menu"><li><a href="src/Control-Exception-Lifted.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">lifted-base-0.1.0.3: lifted IO operations from the base library</p></div><div id="content"><div id="module-header"><table class="info"><tr><th>Portability</th><td>non-portable (extended exceptions)</td></tr><tr><th>Stability</th><td>experimental</td></tr><tr><th>Maintainer</th><td>Bas van Dijk <v.dijk.bas@gmail.com></td></tr></table><p class="caption">Control.Exception.Lifted</p></div><div id="table-of-contents"><p class="caption">Contents</p><ul><li><a href="#g:1">Throwing exceptions </a></li><li><a href="#g:2">Catching exceptions </a><ul><li><a href="#g:3">The <code>catch</code> functions </a></li><li><a href="#g:4">The <code>handle</code> functions </a></li><li><a href="#g:5">The <code>try</code> functions </a></li><li><a href="#g:6">The <code>evaluate</code> function </a></li></ul></li><li><a href="#g:7">Asynchronous Exceptions </a><ul><li><a href="#g:8">Asynchronous exception control </a></li></ul></li><li><a href="#g:9">Brackets </a></li><li><a href="#g:10">Utilities </a></li></ul></div><div id="description"><p class="caption">Description</p><div class="doc"><p>This is a wrapped version of <code>Control.Exception</code> with types generalized from <code>IO</code> to all monads in either <code><a href="/usr/share/doc/ghc/html/libraries/transformers-base-0.4.1/Control-Monad-Base.html#t:MonadBase">MonadBase</a></code> or <code><a href="/usr/share/doc/ghc/html/libraries/monad-control-0.3.1/Control-Monad-Trans-Control.html#t:MonadBaseControl">MonadBaseControl</a></code>. </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">module <a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Control-Exception.html">Control.Exception</a></li><li class="src short"><a href="#v:throwIO">throwIO</a> :: (<a href="/usr/share/doc/ghc/html/libraries/transformers-base-0.4.1/Control-Monad-Base.html#t:MonadBase">MonadBase</a> <a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/System-IO.html#t:IO">IO</a> m, <a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Control-Exception-Base.html#t:Exception">Exception</a> e) => e -> m α</li><li class="src short"><a href="#v:ioError">ioError</a> :: <a href="/usr/share/doc/ghc/html/libraries/transformers-base-0.4.1/Control-Monad-Base.html#t:MonadBase">MonadBase</a> <a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/System-IO.html#t:IO">IO</a> m => <a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/System-IO-Error.html#t:IOError">IOError</a> -> m α</li><li class="src short"><a href="#v:catch">catch</a> :: (<a href="/usr/share/doc/ghc/html/libraries/monad-control-0.3.1/Control-Monad-Trans-Control.html#t:MonadBaseControl">MonadBaseControl</a> <a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/System-IO.html#t:IO">IO</a> m, <a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Control-Exception-Base.html#t:Exception">Exception</a> e) => m α -> (e -> m α) -> m α</li><li class="src short"><a href="#v:catches">catches</a> :: <a href="/usr/share/doc/ghc/html/libraries/monad-control-0.3.1/Control-Monad-Trans-Control.html#t:MonadBaseControl">MonadBaseControl</a> <a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/System-IO.html#t:IO">IO</a> m => m α -> [<a href="Control-Exception-Lifted.html#t:Handler">Handler</a> m α] -> m α</li><li class="src short"><span class="keyword">data</span> <a href="#t:Handler">Handler</a> m α = <span class="keyword">forall</span> e . <a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Control-Exception-Base.html#t:Exception">Exception</a> e => <a href="#v:Handler">Handler</a> (e -> m α)</li><li class="src short"><a href="#v:catchJust">catchJust</a> :: (<a href="/usr/share/doc/ghc/html/libraries/monad-control-0.3.1/Control-Monad-Trans-Control.html#t:MonadBaseControl">MonadBaseControl</a> <a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/System-IO.html#t:IO">IO</a> m, <a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Control-Exception-Base.html#t:Exception">Exception</a> e) => (e -> <a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Data-Maybe.html#t:Maybe">Maybe</a> β) -> m α -> (β -> m α) -> m α</li><li class="src short"><a href="#v:handle">handle</a> :: (<a href="/usr/share/doc/ghc/html/libraries/monad-control-0.3.1/Control-Monad-Trans-Control.html#t:MonadBaseControl">MonadBaseControl</a> <a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/System-IO.html#t:IO">IO</a> m, <a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Control-Exception-Base.html#t:Exception">Exception</a> e) => (e -> m α) -> m α -> m α</li><li class="src short"><a href="#v:handleJust">handleJust</a> :: (<a href="/usr/share/doc/ghc/html/libraries/monad-control-0.3.1/Control-Monad-Trans-Control.html#t:MonadBaseControl">MonadBaseControl</a> <a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/System-IO.html#t:IO">IO</a> m, <a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Control-Exception-Base.html#t:Exception">Exception</a> e) => (e -> <a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Data-Maybe.html#t:Maybe">Maybe</a> β) -> (β -> m α) -> m α -> m α</li><li class="src short"><a href="#v:try">try</a> :: (<a href="/usr/share/doc/ghc/html/libraries/monad-control-0.3.1/Control-Monad-Trans-Control.html#t:MonadBaseControl">MonadBaseControl</a> <a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/System-IO.html#t:IO">IO</a> m, <a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Control-Exception-Base.html#t:Exception">Exception</a> e) => m α -> m (<a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Data-Either.html#t:Either">Either</a> e α)</li><li class="src short"><a href="#v:tryJust">tryJust</a> :: (<a href="/usr/share/doc/ghc/html/libraries/monad-control-0.3.1/Control-Monad-Trans-Control.html#t:MonadBaseControl">MonadBaseControl</a> <a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/System-IO.html#t:IO">IO</a> m, <a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Control-Exception-Base.html#t:Exception">Exception</a> e) => (e -> <a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Data-Maybe.html#t:Maybe">Maybe</a> β) -> m α -> m (<a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Data-Either.html#t:Either">Either</a> β α)</li><li class="src short"><a href="#v:evaluate">evaluate</a> :: <a href="/usr/share/doc/ghc/html/libraries/transformers-base-0.4.1/Control-Monad-Base.html#t:MonadBase">MonadBase</a> <a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/System-IO.html#t:IO">IO</a> m => α -> m α</li><li class="src short"><a href="#v:mask">mask</a> :: <a href="/usr/share/doc/ghc/html/libraries/monad-control-0.3.1/Control-Monad-Trans-Control.html#t:MonadBaseControl">MonadBaseControl</a> <a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/System-IO.html#t:IO">IO</a> m => ((<span class="keyword">forall</span> α. m α -> m α) -> m β) -> m β</li><li class="src short"><a href="#v:mask_">mask_</a> :: <a href="/usr/share/doc/ghc/html/libraries/monad-control-0.3.1/Control-Monad-Trans-Control.html#t:MonadBaseControl">MonadBaseControl</a> <a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/System-IO.html#t:IO">IO</a> m => m α -> m α</li><li class="src short"><a href="#v:uninterruptibleMask">uninterruptibleMask</a> :: <a href="/usr/share/doc/ghc/html/libraries/monad-control-0.3.1/Control-Monad-Trans-Control.html#t:MonadBaseControl">MonadBaseControl</a> <a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/System-IO.html#t:IO">IO</a> m => ((<span class="keyword">forall</span> α. m α -> m α) -> m β) -> m β</li><li class="src short"><a href="#v:uninterruptibleMask_">uninterruptibleMask_</a> :: <a href="/usr/share/doc/ghc/html/libraries/monad-control-0.3.1/Control-Monad-Trans-Control.html#t:MonadBaseControl">MonadBaseControl</a> <a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/System-IO.html#t:IO">IO</a> m => m α -> m α</li><li class="src short"><a href="#v:getMaskingState">getMaskingState</a> :: <a href="/usr/share/doc/ghc/html/libraries/transformers-base-0.4.1/Control-Monad-Base.html#t:MonadBase">MonadBase</a> <a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/System-IO.html#t:IO">IO</a> m => m <a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Control-Exception-Base.html#t:MaskingState">MaskingState</a></li><li class="src short"><a href="#v:blocked">blocked</a> :: <a href="/usr/share/doc/ghc/html/libraries/transformers-base-0.4.1/Control-Monad-Base.html#t:MonadBase">MonadBase</a> <a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/System-IO.html#t:IO">IO</a> m => m <a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Data-Bool.html#t:Bool">Bool</a></li><li class="src short"><a href="#v:bracket">bracket</a> :: <a href="/usr/share/doc/ghc/html/libraries/monad-control-0.3.1/Control-Monad-Trans-Control.html#t:MonadBaseControl">MonadBaseControl</a> <a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/System-IO.html#t:IO">IO</a> m => m α -> (α -> m β) -> (α -> m γ) -> m γ</li><li class="src short"><a href="#v:bracket_">bracket_</a> :: <a href="/usr/share/doc/ghc/html/libraries/monad-control-0.3.1/Control-Monad-Trans-Control.html#t:MonadBaseControl">MonadBaseControl</a> <a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/System-IO.html#t:IO">IO</a> m => m α -> m β -> m γ -> m γ</li><li class="src short"><a href="#v:bracketOnError">bracketOnError</a> :: <a href="/usr/share/doc/ghc/html/libraries/monad-control-0.3.1/Control-Monad-Trans-Control.html#t:MonadBaseControl">MonadBaseControl</a> <a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/System-IO.html#t:IO">IO</a> m => m α -> (α -> m β) -> (α -> m γ) -> m γ</li><li class="src short"><a href="#v:finally">finally</a> :: <a href="/usr/share/doc/ghc/html/libraries/monad-control-0.3.1/Control-Monad-Trans-Control.html#t:MonadBaseControl">MonadBaseControl</a> <a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/System-IO.html#t:IO">IO</a> m => m α -> m β -> m α</li><li class="src short"><a href="#v:onException">onException</a> :: <a href="/usr/share/doc/ghc/html/libraries/monad-control-0.3.1/Control-Monad-Trans-Control.html#t:MonadBaseControl">MonadBaseControl</a> <a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/System-IO.html#t:IO">IO</a> m => m α -> m β -> m α</li></ul></div><div id="interface"><h1>Documentation</h1><div class="top"><p class="src">module <a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Control-Exception.html">Control.Exception</a></p></div><h1 id="g:1">Throwing exceptions </h1><div class="top"><p class="src"><a name="v:throwIO" class="def">throwIO</a> :: (<a href="/usr/share/doc/ghc/html/libraries/transformers-base-0.4.1/Control-Monad-Base.html#t:MonadBase">MonadBase</a> <a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/System-IO.html#t:IO">IO</a> m, <a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Control-Exception-Base.html#t:Exception">Exception</a> e) => e -> m α<a href="src/Control-Exception-Lifted.html#throwIO" class="link">Source</a></p><div class="doc"><p>Generalized version of <code><a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Control-Exception-Base.html#v:throwIO">throwIO</a></code>. </p></div></div><div class="top"><p class="src"><a name="v:ioError" class="def">ioError</a> :: <a href="/usr/share/doc/ghc/html/libraries/transformers-base-0.4.1/Control-Monad-Base.html#t:MonadBase">MonadBase</a> <a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/System-IO.html#t:IO">IO</a> m => <a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/System-IO-Error.html#t:IOError">IOError</a> -> m α<a href="src/Control-Exception-Lifted.html#ioError" class="link">Source</a></p><div class="doc"><p>Generalized version of <code><a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Control-Exception-Base.html#v:ioError">ioError</a></code>. </p></div></div><h1 id="g:2">Catching exceptions </h1><h2 id="g:3">The <code>catch</code> functions </h2><div class="top"><p class="src"><a name="v:catch" class="def">catch</a><a href="src/Control-Exception-Lifted.html#catch" class="link">Source</a></p><div class="subs arguments"><p class="caption">Arguments</p><table><tr><td class="src">:: (<a href="/usr/share/doc/ghc/html/libraries/monad-control-0.3.1/Control-Monad-Trans-Control.html#t:MonadBaseControl">MonadBaseControl</a> <a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/System-IO.html#t:IO">IO</a> m, <a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Control-Exception-Base.html#t:Exception">Exception</a> e)</td><td class="doc empty"> </td></tr><tr><td class="src">=> m α</td><td class="doc"><p>The computation to run </p></td></tr><tr><td class="src">-> (e -> m α)</td><td class="doc"><p>Handler to invoke if an exception is raised </p></td></tr><tr><td class="src">-> m α</td><td class="doc empty"> </td></tr></table></div><div class="doc"><p>Generalized version of <code><a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Control-Exception-Base.html#v:catch">catch</a></code>. </p></div></div><div class="top"><p class="src"><a name="v:catches" class="def">catches</a> :: <a href="/usr/share/doc/ghc/html/libraries/monad-control-0.3.1/Control-Monad-Trans-Control.html#t:MonadBaseControl">MonadBaseControl</a> <a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/System-IO.html#t:IO">IO</a> m => m α -> [<a href="Control-Exception-Lifted.html#t:Handler">Handler</a> m α] -> m α<a href="src/Control-Exception-Lifted.html#catches" class="link">Source</a></p><div class="doc"><p>Generalized version of <code><a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Control-Exception.html#v:catches">catches</a></code>. </p></div></div><div class="top"><p class="src"><span class="keyword">data</span> <a name="t:Handler" class="def">Handler</a> m α <a href="src/Control-Exception-Lifted.html#Handler" class="link">Source</a></p><div class="doc"><p>Generalized version of <code><a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Control-Exception.html#t:Handler">Handler</a></code>. </p></div><div class="subs constructors"><p class="caption">Constructors</p><table><tr><td class="src"><span class="keyword">forall</span> e . <a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Control-Exception-Base.html#t:Exception">Exception</a> e => <a name="v:Handler" class="def">Handler</a> (e -> m α)</td><td class="doc empty"> </td></tr></table></div></div><div class="top"><p class="src"><a name="v:catchJust" class="def">catchJust</a><a href="src/Control-Exception-Lifted.html#catchJust" class="link">Source</a></p><div class="subs arguments"><p class="caption">Arguments</p><table><tr><td class="src">:: (<a href="/usr/share/doc/ghc/html/libraries/monad-control-0.3.1/Control-Monad-Trans-Control.html#t:MonadBaseControl">MonadBaseControl</a> <a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/System-IO.html#t:IO">IO</a> m, <a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Control-Exception-Base.html#t:Exception">Exception</a> e)</td><td class="doc empty"> </td></tr><tr><td class="src">=> (e -> <a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Data-Maybe.html#t:Maybe">Maybe</a> β)</td><td class="doc"><p>Predicate to select exceptions </p></td></tr><tr><td class="src">-> m α</td><td class="doc"><p>Computation to run </p></td></tr><tr><td class="src">-> (β -> m α)</td><td class="doc"><p>Handler </p></td></tr><tr><td class="src">-> m α</td><td class="doc empty"> </td></tr></table></div><div class="doc"><p>Generalized version of <code><a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Control-Exception-Base.html#v:catchJust">catchJust</a></code>. </p></div></div><h2 id="g:4">The <code>handle</code> functions </h2><div class="top"><p class="src"><a name="v:handle" class="def">handle</a> :: (<a href="/usr/share/doc/ghc/html/libraries/monad-control-0.3.1/Control-Monad-Trans-Control.html#t:MonadBaseControl">MonadBaseControl</a> <a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/System-IO.html#t:IO">IO</a> m, <a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Control-Exception-Base.html#t:Exception">Exception</a> e) => (e -> m α) -> m α -> m α<a href="src/Control-Exception-Lifted.html#handle" class="link">Source</a></p><div class="doc"><p>Generalized version of <code><a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Control-Exception-Base.html#v:handle">handle</a></code>. </p></div></div><div class="top"><p class="src"><a name="v:handleJust" class="def">handleJust</a> :: (<a href="/usr/share/doc/ghc/html/libraries/monad-control-0.3.1/Control-Monad-Trans-Control.html#t:MonadBaseControl">MonadBaseControl</a> <a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/System-IO.html#t:IO">IO</a> m, <a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Control-Exception-Base.html#t:Exception">Exception</a> e) => (e -> <a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Data-Maybe.html#t:Maybe">Maybe</a> β) -> (β -> m α) -> m α -> m α<a href="src/Control-Exception-Lifted.html#handleJust" class="link">Source</a></p><div class="doc"><p>Generalized version of <code><a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Control-Exception-Base.html#v:handleJust">handleJust</a></code>. </p></div></div><h2 id="g:5">The <code>try</code> functions </h2><div class="top"><p class="src"><a name="v:try" class="def">try</a> :: (<a href="/usr/share/doc/ghc/html/libraries/monad-control-0.3.1/Control-Monad-Trans-Control.html#t:MonadBaseControl">MonadBaseControl</a> <a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/System-IO.html#t:IO">IO</a> m, <a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Control-Exception-Base.html#t:Exception">Exception</a> e) => m α -> m (<a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Data-Either.html#t:Either">Either</a> e α)<a href="src/Control-Exception-Lifted.html#try" class="link">Source</a></p><div class="doc"><p>Generalized version of <code><a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Control-Exception-Base.html#v:try">try</a></code>. </p></div></div><div class="top"><p class="src"><a name="v:tryJust" class="def">tryJust</a> :: (<a href="/usr/share/doc/ghc/html/libraries/monad-control-0.3.1/Control-Monad-Trans-Control.html#t:MonadBaseControl">MonadBaseControl</a> <a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/System-IO.html#t:IO">IO</a> m, <a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Control-Exception-Base.html#t:Exception">Exception</a> e) => (e -> <a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Data-Maybe.html#t:Maybe">Maybe</a> β) -> m α -> m (<a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Data-Either.html#t:Either">Either</a> β α)<a href="src/Control-Exception-Lifted.html#tryJust" class="link">Source</a></p><div class="doc"><p>Generalized version of <code><a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Control-Exception-Base.html#v:tryJust">tryJust</a></code>. </p></div></div><h2 id="g:6">The <code>evaluate</code> function </h2><div class="top"><p class="src"><a name="v:evaluate" class="def">evaluate</a> :: <a href="/usr/share/doc/ghc/html/libraries/transformers-base-0.4.1/Control-Monad-Base.html#t:MonadBase">MonadBase</a> <a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/System-IO.html#t:IO">IO</a> m => α -> m α<a href="src/Control-Exception-Lifted.html#evaluate" class="link">Source</a></p><div class="doc"><p>Generalized version of <code><a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Control-Exception-Base.html#v:evaluate">evaluate</a></code>. </p></div></div><h1 id="g:7">Asynchronous Exceptions </h1><h2 id="g:8">Asynchronous exception control </h2><div class="doc"><p>The following functions allow a thread to control delivery of asynchronous exceptions during a critical region. </p></div><div class="top"><p class="src"><a name="v:mask" class="def">mask</a> :: <a href="/usr/share/doc/ghc/html/libraries/monad-control-0.3.1/Control-Monad-Trans-Control.html#t:MonadBaseControl">MonadBaseControl</a> <a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/System-IO.html#t:IO">IO</a> m => ((<span class="keyword">forall</span> α. m α -> m α) -> m β) -> m β<a href="src/Control-Exception-Lifted.html#mask" class="link">Source</a></p><div class="doc"><p>Generalized version of <code><a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Control-Exception-Base.html#v:mask">mask</a></code>. </p></div></div><div class="top"><p class="src"><a name="v:mask_" class="def">mask_</a> :: <a href="/usr/share/doc/ghc/html/libraries/monad-control-0.3.1/Control-Monad-Trans-Control.html#t:MonadBaseControl">MonadBaseControl</a> <a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/System-IO.html#t:IO">IO</a> m => m α -> m α<a href="src/Control-Exception-Lifted.html#mask_" class="link">Source</a></p><div class="doc"><p>Generalized version of <code><a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Control-Exception-Base.html#v:mask_">mask_</a></code>. </p></div></div><div class="top"><p class="src"><a name="v:uninterruptibleMask" class="def">uninterruptibleMask</a> :: <a href="/usr/share/doc/ghc/html/libraries/monad-control-0.3.1/Control-Monad-Trans-Control.html#t:MonadBaseControl">MonadBaseControl</a> <a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/System-IO.html#t:IO">IO</a> m => ((<span class="keyword">forall</span> α. m α -> m α) -> m β) -> m β<a href="src/Control-Exception-Lifted.html#uninterruptibleMask" class="link">Source</a></p><div class="doc"><p>Generalized version of <code><a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Control-Exception-Base.html#v:uninterruptibleMask">uninterruptibleMask</a></code>. </p></div></div><div class="top"><p class="src"><a name="v:uninterruptibleMask_" class="def">uninterruptibleMask_</a> :: <a href="/usr/share/doc/ghc/html/libraries/monad-control-0.3.1/Control-Monad-Trans-Control.html#t:MonadBaseControl">MonadBaseControl</a> <a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/System-IO.html#t:IO">IO</a> m => m α -> m α<a href="src/Control-Exception-Lifted.html#uninterruptibleMask_" class="link">Source</a></p><div class="doc"><p>Generalized version of <code><a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Control-Exception-Base.html#v:uninterruptibleMask_">uninterruptibleMask_</a></code>. </p></div></div><div class="top"><p class="src"><a name="v:getMaskingState" class="def">getMaskingState</a> :: <a href="/usr/share/doc/ghc/html/libraries/transformers-base-0.4.1/Control-Monad-Base.html#t:MonadBase">MonadBase</a> <a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/System-IO.html#t:IO">IO</a> m => m <a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Control-Exception-Base.html#t:MaskingState">MaskingState</a><a href="src/Control-Exception-Lifted.html#getMaskingState" class="link">Source</a></p><div class="doc"><p>Generalized version of <code><a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Control-Exception-Base.html#v:getMaskingState">getMaskingState</a></code>. </p></div></div><div class="top"><p class="src"><a name="v:blocked" class="def">blocked</a> :: <a href="/usr/share/doc/ghc/html/libraries/transformers-base-0.4.1/Control-Monad-Base.html#t:MonadBase">MonadBase</a> <a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/System-IO.html#t:IO">IO</a> m => m <a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Data-Bool.html#t:Bool">Bool</a><a href="src/Control-Exception-Lifted.html#blocked" class="link">Source</a></p><div class="doc"><p>Generalized version of <code><a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Control-Exception-Base.html#v:blocked">blocked</a></code>. returns <code>True</code> if asynchronous exceptions are blocked in the current thread. </p></div></div><h1 id="g:9">Brackets </h1><div class="top"><p class="src"><a name="v:bracket" class="def">bracket</a><a href="src/Control-Exception-Lifted.html#bracket" class="link">Source</a></p><div class="subs arguments"><p class="caption">Arguments</p><table><tr><td class="src">:: <a href="/usr/share/doc/ghc/html/libraries/monad-control-0.3.1/Control-Monad-Trans-Control.html#t:MonadBaseControl">MonadBaseControl</a> <a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/System-IO.html#t:IO">IO</a> m</td><td class="doc empty"> </td></tr><tr><td class="src">=> m α</td><td class="doc"><p>computation to run first ("acquire resource") </p></td></tr><tr><td class="src">-> (α -> m β)</td><td class="doc"><p>computation to run last ("release resource") </p></td></tr><tr><td class="src">-> (α -> m γ)</td><td class="doc"><p>computation to run in-between </p></td></tr><tr><td class="src">-> m γ</td><td class="doc empty"> </td></tr></table></div><div class="doc"><p>Generalized version of <code><a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Control-Exception-Base.html#v:bracket">bracket</a></code>. Note, any monadic side effects in <code>m</code> of the "release" computation will be discarded; it is run only for its side effects in <code>IO</code>. </p><p>Note that when your <code>acquire</code> and <code>release</code> computations are of type <code><a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/System-IO.html#t:IO">IO</a></code> it will be more efficient to write: </p><pre><code><a href="/usr/share/doc/ghc/html/libraries/monad-control-0.3.1/Control-Monad-Trans-Control.html#v:liftBaseOp">liftBaseOp</a></code> (<code><a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Control-Exception-Base.html#v:bracket">bracket</a></code> acquire release)</pre></div></div><div class="top"><p class="src"><a name="v:bracket_" class="def">bracket_</a><a href="src/Control-Exception-Lifted.html#bracket_" class="link">Source</a></p><div class="subs arguments"><p class="caption">Arguments</p><table><tr><td class="src">:: <a href="/usr/share/doc/ghc/html/libraries/monad-control-0.3.1/Control-Monad-Trans-Control.html#t:MonadBaseControl">MonadBaseControl</a> <a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/System-IO.html#t:IO">IO</a> m</td><td class="doc empty"> </td></tr><tr><td class="src">=> m α</td><td class="doc"><p>computation to run first ("acquire resource") </p></td></tr><tr><td class="src">-> m β</td><td class="doc"><p>computation to run last ("release resource") </p></td></tr><tr><td class="src">-> m γ</td><td class="doc"><p>computation to run in-between </p></td></tr><tr><td class="src">-> m γ</td><td class="doc empty"> </td></tr></table></div><div class="doc"><p>Generalized version of <code><a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Control-Exception-Base.html#v:bracket_">bracket_</a></code>. Note, any monadic side effects in <code>m</code> of <em>both</em> the "acquire" and "release" computations will be discarded. To keep the monadic side effects of the "acquire" computation, use <code><a href="Control-Exception-Lifted.html#v:bracket">bracket</a></code> with constant functions instead. </p><p>Note that when your <code>acquire</code> and <code>release</code> computations are of type <code><a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/System-IO.html#t:IO">IO</a></code> it will be more efficient to write: </p><pre><code><a href="/usr/share/doc/ghc/html/libraries/monad-control-0.3.1/Control-Monad-Trans-Control.html#v:liftBaseOp_">liftBaseOp_</a></code> (<code><a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Control-Exception-Base.html#v:bracket_">bracket_</a></code> acquire release)</pre></div></div><div class="top"><p class="src"><a name="v:bracketOnError" class="def">bracketOnError</a><a href="src/Control-Exception-Lifted.html#bracketOnError" class="link">Source</a></p><div class="subs arguments"><p class="caption">Arguments</p><table><tr><td class="src">:: <a href="/usr/share/doc/ghc/html/libraries/monad-control-0.3.1/Control-Monad-Trans-Control.html#t:MonadBaseControl">MonadBaseControl</a> <a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/System-IO.html#t:IO">IO</a> m</td><td class="doc empty"> </td></tr><tr><td class="src">=> m α</td><td class="doc"><p>computation to run first ("acquire resource") </p></td></tr><tr><td class="src">-> (α -> m β)</td><td class="doc"><p>computation to run last ("release resource") </p></td></tr><tr><td class="src">-> (α -> m γ)</td><td class="doc"><p>computation to run in-between </p></td></tr><tr><td class="src">-> m γ</td><td class="doc empty"> </td></tr></table></div><div class="doc"><p>Generalized version of <code><a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Control-Exception-Base.html#v:bracketOnError">bracketOnError</a></code>. Note, any monadic side effects in <code>m</code> of the "release" computation will be discarded. </p><p>Note that when your <code>acquire</code> and <code>release</code> computations are of type <code><a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/System-IO.html#t:IO">IO</a></code> it will be more efficient to write: </p><pre><code><a href="/usr/share/doc/ghc/html/libraries/monad-control-0.3.1/Control-Monad-Trans-Control.html#v:liftBaseOp">liftBaseOp</a></code> (<code><a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Control-Exception-Base.html#v:bracketOnError">bracketOnError</a></code> acquire release)</pre></div></div><h1 id="g:10">Utilities </h1><div class="top"><p class="src"><a name="v:finally" class="def">finally</a><a href="src/Control-Exception-Lifted.html#finally" class="link">Source</a></p><div class="subs arguments"><p class="caption">Arguments</p><table><tr><td class="src">:: <a href="/usr/share/doc/ghc/html/libraries/monad-control-0.3.1/Control-Monad-Trans-Control.html#t:MonadBaseControl">MonadBaseControl</a> <a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/System-IO.html#t:IO">IO</a> m</td><td class="doc empty"> </td></tr><tr><td class="src">=> m α</td><td class="doc"><p>computation to run first </p></td></tr><tr><td class="src">-> m β</td><td class="doc"><p>computation to run afterward (even if an exception was raised) </p></td></tr><tr><td class="src">-> m α</td><td class="doc empty"> </td></tr></table></div><div class="doc"><p>Generalized version of <code><a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Control-Exception-Base.html#v:finally">finally</a></code>. Note, any monadic side effects in <code>m</code> of the "afterward" computation will be discarded. </p></div></div><div class="top"><p class="src"><a name="v:onException" class="def">onException</a> :: <a href="/usr/share/doc/ghc/html/libraries/monad-control-0.3.1/Control-Monad-Trans-Control.html#t:MonadBaseControl">MonadBaseControl</a> <a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/System-IO.html#t:IO">IO</a> m => m α -> m β -> m α<a href="src/Control-Exception-Lifted.html#onException" class="link">Source</a></p><div class="doc"><p>Generalized version of <code><a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Control-Exception-Base.html#v:onException">onException</a></code>. Note, any monadic side effects in <code>m</code> of the "afterward" computation will be discarded. </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>