diff --git a/Control-Monad-Catch-Pure.html b/Control-Monad-Catch-Pure.html new file mode 100644 index 0000000000000000000000000000000000000000..29aa2826d7a144ee0eff8af1ed93ba192b6de737 --- /dev/null +++ b/Control-Monad-Catch-Pure.html @@ -0,0 +1,17 @@ +<!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.Catch.Pure</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-Catch-Pure.html");}; +//]]> +</script></head><body><div id="package-header"><ul class="links" id="page-menu"><li><a href="src/Control-Monad-Catch-Pure.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">exceptions-0.8.0.1: Extensible optionally-pure exceptions</p></div><div id="content"><div id="module-header"><table class="info"><tr><th>Copyright</th><td>(C) Edward Kmett 2013-2014, (c) Google Inc. 2012</td></tr><tr><th>License</th><td>BSD-style (see the file LICENSE)</td></tr><tr><th>Maintainer</th><td>Edward Kmett <ekmett@gmail.com></td></tr><tr><th>Stability</th><td>experimental</td></tr><tr><th>Portability</th><td>non-portable</td></tr><tr><th>Safe Haskell</th><td>Trustworthy</td></tr><tr><th>Language</th><td>Haskell98</td></tr></table><p class="caption">Control.Monad.Catch.Pure</p></div><div id="table-of-contents"><p class="caption">Contents</p><ul><li><a href="#g:1">Transformer</a></li><li><a href="#g:2">Typeclass</a></li></ul></div><div id="description"><p class="caption">Description</p><div class="doc"><p>This module supplies a 'pure' monad transformer that can be used for + mock-testing code that throws exceptions, so long as those exceptions + are always thrown with <code><a href="Control-Monad-Catch.html#v:throwM">throwM</a></code>.</p><p>Do not mix <code><a href="Control-Monad-Catch-Pure.html#t:CatchT">CatchT</a></code> with <code><a href="file:///usr/local/share/doc/ghc/html/libraries/base-4.7.0.1/System-IO.html#t:IO">IO</a></code>. Choose one or the other for the + bottom of your transformer stack!</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">newtype</span> <a href="#t:CatchT">CatchT</a> m a = <a href="#v:CatchT">CatchT</a> {<ul class="subs"><li><a href="#v:runCatchT">runCatchT</a> :: m (<a href="file:///usr/local/share/doc/ghc/html/libraries/base-4.7.0.1/Data-Either.html#t:Either">Either</a> <a href="Control-Monad-Catch.html#t:SomeException">SomeException</a> a)</li></ul>}</li><li class="src short"><span class="keyword">type</span> <a href="#t:Catch">Catch</a> = <a href="Control-Monad-Catch-Pure.html#t:CatchT">CatchT</a> Identity</li><li class="src short"><a href="#v:runCatch">runCatch</a> :: <a href="Control-Monad-Catch-Pure.html#t:Catch">Catch</a> a -> <a href="file:///usr/local/share/doc/ghc/html/libraries/base-4.7.0.1/Data-Either.html#t:Either">Either</a> <a href="Control-Monad-Catch.html#t:SomeException">SomeException</a> a</li><li class="src short"><a href="#v:mapCatchT">mapCatchT</a> :: (m (<a href="file:///usr/local/share/doc/ghc/html/libraries/base-4.7.0.1/Data-Either.html#t:Either">Either</a> <a href="Control-Monad-Catch.html#t:SomeException">SomeException</a> a) -> n (<a href="file:///usr/local/share/doc/ghc/html/libraries/base-4.7.0.1/Data-Either.html#t:Either">Either</a> <a href="Control-Monad-Catch.html#t:SomeException">SomeException</a> b)) -> <a href="Control-Monad-Catch-Pure.html#t:CatchT">CatchT</a> m a -> <a href="Control-Monad-Catch-Pure.html#t:CatchT">CatchT</a> n b</li><li class="src short">module <a href="Control-Monad-Catch.html">Control.Monad.Catch</a></li></ul></div><div id="interface"><h1 id="g:1">Transformer</h1><div class="doc"><p>The <code>transformers</code>-style monad transfomer</p></div><div class="top"><p class="src"><span class="keyword">newtype</span> <a name="t:CatchT" class="def">CatchT</a> m a <a href="src/Control-Monad-Catch-Pure.html#CatchT" class="link">Source</a></p><div class="doc"><p>Add <code><a href="Control-Monad-Catch.html#t:Exception">Exception</a></code> handling abilities to a <code><a href="file:///usr/local/share/doc/ghc/html/libraries/base-4.7.0.1/Control-Monad.html#t:Monad">Monad</a></code>.</p><p>This should <em>never</em> be used in combination with <code><a href="file:///usr/local/share/doc/ghc/html/libraries/base-4.7.0.1/System-IO.html#t:IO">IO</a></code>. Think of <code><a href="Control-Monad-Catch-Pure.html#t:CatchT">CatchT</a></code> + as an alternative base monad for use with mocking code that solely throws + exceptions via <code><a href="Control-Monad-Catch.html#v:throwM">throwM</a></code>.</p><p>Note: that <code><a href="file:///usr/local/share/doc/ghc/html/libraries/base-4.7.0.1/System-IO.html#t:IO">IO</a></code> monad has these abilities already, so stacking <code><a href="Control-Monad-Catch-Pure.html#t:CatchT">CatchT</a></code> on top + of it does not add any value and can possibly be confusing:</p><pre class="screen"><code class="prompt">>>> </code><strong class="userinput"><code>(error "Hello!" :: IO ()) `catch` (\(e :: ErrorCall) -> liftIO $ print e) +</code></strong>Hello! +</pre><pre class="screen"><code class="prompt">>>> </code><strong class="userinput"><code>runCatchT $ (error "Hello!" :: CatchT IO ()) `catch` (\(e :: ErrorCall) -> liftIO $ print e) +</code></strong>*** Exception: Hello! +</pre><pre class="screen"><code class="prompt">>>> </code><strong class="userinput"><code>runCatchT $ (throwM (ErrorCall "Hello!") :: CatchT IO ()) `catch` (\(e :: ErrorCall) -> liftIO $ print e) +</code></strong>Hello! +</pre></div><div class="subs constructors"><p class="caption">Constructors</p><table><tr><td class="src"><a name="v:CatchT" class="def">CatchT</a></td><td class="doc empty"> </td></tr><tr><td colspan="2"><div class="subs fields"><p class="caption">Fields</p><dl><dt class="src"><a name="v:runCatchT" class="def">runCatchT</a> :: m (<a href="file:///usr/local/share/doc/ghc/html/libraries/base-4.7.0.1/Data-Either.html#t:Either">Either</a> <a href="Control-Monad-Catch.html#t:SomeException">SomeException</a> a)</dt><dd class="doc empty"> </dd></dl><div class="clear"></div></div></td></tr></table></div><div class="subs instances"><p id="control.i:CatchT" class="caption collapser" onclick="toggleSection('i:CatchT')">Instances</p><div id="section.i:CatchT" class="show"><table><tr><td class="src">MonadTrans <a href="Control-Monad-Catch-Pure.html#t:CatchT">CatchT</a></td><td class="doc empty"> </td></tr><tr><td class="src">MonadRWS r w s m => MonadRWS r w s (<a href="Control-Monad-Catch-Pure.html#t:CatchT">CatchT</a> m)</td><td class="doc empty"> </td></tr><tr><td class="src">MonadReader e m => MonadReader e (<a href="Control-Monad-Catch-Pure.html#t:CatchT">CatchT</a> m)</td><td class="doc empty"> </td></tr><tr><td class="src">MonadWriter w m => MonadWriter w (<a href="Control-Monad-Catch-Pure.html#t:CatchT">CatchT</a> m)</td><td class="doc empty"> </td></tr><tr><td class="src">MonadState s m => MonadState s (<a href="Control-Monad-Catch-Pure.html#t:CatchT">CatchT</a> m)</td><td class="doc empty"> </td></tr><tr><td class="src"><a href="file:///usr/local/share/doc/ghc/html/libraries/base-4.7.0.1/Control-Monad.html#t:Monad">Monad</a> m => <a href="file:///usr/local/share/doc/ghc/html/libraries/base-4.7.0.1/Control-Applicative.html#t:Alternative">Alternative</a> (<a href="Control-Monad-Catch-Pure.html#t:CatchT">CatchT</a> m)</td><td class="doc empty"> </td></tr><tr><td class="src"><a href="file:///usr/local/share/doc/ghc/html/libraries/base-4.7.0.1/Control-Monad.html#t:Monad">Monad</a> m => <a href="file:///usr/local/share/doc/ghc/html/libraries/base-4.7.0.1/Control-Monad.html#t:Monad">Monad</a> (<a href="Control-Monad-Catch-Pure.html#t:CatchT">CatchT</a> m)</td><td class="doc empty"> </td></tr><tr><td class="src"><a href="file:///usr/local/share/doc/ghc/html/libraries/base-4.7.0.1/Control-Monad.html#t:Monad">Monad</a> m => <a href="file:///usr/local/share/doc/ghc/html/libraries/base-4.7.0.1/Control-Monad.html#t:Functor">Functor</a> (<a href="Control-Monad-Catch-Pure.html#t:CatchT">CatchT</a> m)</td><td class="doc empty"> </td></tr><tr><td class="src"><a href="file:///usr/local/share/doc/ghc/html/libraries/base-4.7.0.1/Control-Monad-Fix.html#t:MonadFix">MonadFix</a> m => <a href="file:///usr/local/share/doc/ghc/html/libraries/base-4.7.0.1/Control-Monad-Fix.html#t:MonadFix">MonadFix</a> (<a href="Control-Monad-Catch-Pure.html#t:CatchT">CatchT</a> m)</td><td class="doc empty"> </td></tr><tr><td class="src"><a href="file:///usr/local/share/doc/ghc/html/libraries/base-4.7.0.1/Control-Monad.html#t:Monad">Monad</a> m => <a href="file:///usr/local/share/doc/ghc/html/libraries/base-4.7.0.1/Control-Monad.html#t:MonadPlus">MonadPlus</a> (<a href="Control-Monad-Catch-Pure.html#t:CatchT">CatchT</a> m)</td><td class="doc empty"> </td></tr><tr><td class="src"><a href="file:///usr/local/share/doc/ghc/html/libraries/base-4.7.0.1/Control-Monad.html#t:Monad">Monad</a> m => <a href="file:///usr/local/share/doc/ghc/html/libraries/base-4.7.0.1/Control-Applicative.html#t:Applicative">Applicative</a> (<a href="Control-Monad-Catch-Pure.html#t:CatchT">CatchT</a> m)</td><td class="doc empty"> </td></tr><tr><td class="src"><a href="file:///usr/local/share/doc/ghc/html/libraries/base-4.7.0.1/Data-Foldable.html#t:Foldable">Foldable</a> m => <a href="file:///usr/local/share/doc/ghc/html/libraries/base-4.7.0.1/Data-Foldable.html#t:Foldable">Foldable</a> (<a href="Control-Monad-Catch-Pure.html#t:CatchT">CatchT</a> m)</td><td class="doc empty"> </td></tr><tr><td class="src">(<a href="file:///usr/local/share/doc/ghc/html/libraries/base-4.7.0.1/Control-Monad.html#t:Monad">Monad</a> m, <a href="file:///usr/local/share/doc/ghc/html/libraries/base-4.7.0.1/Data-Traversable.html#t:Traversable">Traversable</a> m) => <a href="file:///usr/local/share/doc/ghc/html/libraries/base-4.7.0.1/Data-Traversable.html#t:Traversable">Traversable</a> (<a href="Control-Monad-Catch-Pure.html#t:CatchT">CatchT</a> m)</td><td class="doc empty"> </td></tr><tr><td class="src">MonadIO m => MonadIO (<a href="Control-Monad-Catch-Pure.html#t:CatchT">CatchT</a> m)</td><td class="doc empty"> </td></tr><tr><td class="src"><a href="file:///usr/local/share/doc/ghc/html/libraries/base-4.7.0.1/Control-Monad.html#t:Monad">Monad</a> m => <a href="Control-Monad-Catch.html#t:MonadMask">MonadMask</a> (<a href="Control-Monad-Catch-Pure.html#t:CatchT">CatchT</a> m)</td><td class="doc"><p>Note: This instance is only valid if the underlying monad has a single + exit point!</p></td></tr><tr><td class="src"><a href="file:///usr/local/share/doc/ghc/html/libraries/base-4.7.0.1/Control-Monad.html#t:Monad">Monad</a> m => <a href="Control-Monad-Catch.html#t:MonadCatch">MonadCatch</a> (<a href="Control-Monad-Catch-Pure.html#t:CatchT">CatchT</a> m)</td><td class="doc empty"> </td></tr><tr><td class="src"><a href="file:///usr/local/share/doc/ghc/html/libraries/base-4.7.0.1/Control-Monad.html#t:Monad">Monad</a> m => <a href="Control-Monad-Catch.html#t:MonadThrow">MonadThrow</a> (<a href="Control-Monad-Catch-Pure.html#t:CatchT">CatchT</a> m)</td><td class="doc empty"> </td></tr></table></div></div></div><div class="top"><p class="src"><span class="keyword">type</span> <a name="t:Catch" class="def">Catch</a> = <a href="Control-Monad-Catch-Pure.html#t:CatchT">CatchT</a> Identity <a href="src/Control-Monad-Catch-Pure.html#Catch" class="link">Source</a></p></div><div class="top"><p class="src"><a name="v:runCatch" class="def">runCatch</a> :: <a href="Control-Monad-Catch-Pure.html#t:Catch">Catch</a> a -> <a href="file:///usr/local/share/doc/ghc/html/libraries/base-4.7.0.1/Data-Either.html#t:Either">Either</a> <a href="Control-Monad-Catch.html#t:SomeException">SomeException</a> a <a href="src/Control-Monad-Catch-Pure.html#runCatch" class="link">Source</a></p></div><div class="top"><p class="src"><a name="v:mapCatchT" class="def">mapCatchT</a> :: (m (<a href="file:///usr/local/share/doc/ghc/html/libraries/base-4.7.0.1/Data-Either.html#t:Either">Either</a> <a href="Control-Monad-Catch.html#t:SomeException">SomeException</a> a) -> n (<a href="file:///usr/local/share/doc/ghc/html/libraries/base-4.7.0.1/Data-Either.html#t:Either">Either</a> <a href="Control-Monad-Catch.html#t:SomeException">SomeException</a> b)) -> <a href="Control-Monad-Catch-Pure.html#t:CatchT">CatchT</a> m a -> <a href="Control-Monad-Catch-Pure.html#t:CatchT">CatchT</a> n b <a href="src/Control-Monad-Catch-Pure.html#mapCatchT" class="link">Source</a></p><div class="doc"><p>Map the unwrapped computation using the given function.</p><pre><code><a href="Control-Monad-Catch-Pure.html#v:runCatchT">runCatchT</a></code> (<code><a href="Control-Monad-Catch-Pure.html#v:mapCatchT">mapCatchT</a></code> f m) = f (<code><a href="Control-Monad-Catch-Pure.html#v:runCatchT">runCatchT</a></code> m)</pre></div></div><h1 id="g:2">Typeclass</h1><div class="doc"><p>The mtl style typeclass</p></div><div class="top"><p class="src">module <a href="Control-Monad-Catch.html">Control.Monad.Catch</a></p></div></div></div><div id="footer"><p>Produced by <a href="http://www.haskell.org/haddock/">Haddock</a> version 2.15.1</p></div></body></html> \ No newline at end of file diff --git a/Control-Monad-Catch.html b/Control-Monad-Catch.html index 7bb7752188067b4a5c5727aa6ff7ed26e34ad1d6..6e7d7c5ab692b3876e94f59576db3bad73b31e28 100644 --- a/Control-Monad-Catch.html +++ b/Control-Monad-Catch.html @@ -1,142 +1,120 @@ <!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.Catch</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-Catch.html");}; //]]> -</script></head><body><div id="package-header"><ul class="links" id="page-menu"><li><a href="src/Control-Monad-Catch.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">exceptions-0.1: Extensible optionally-pure exceptions</p></div><div id="content"><div id="module-header"><table class="info"><tr><th>Portability</th><td>non-portable</td></tr><tr><th>Stability</th><td>experimental</td></tr><tr><th>Maintainer</th><td>Edward Kmett <ekmett@gmail.com></td></tr><tr><th>Safe Haskell</th><td>None</td></tr></table><p class="caption">Control.Monad.Catch</p></div><div id="table-of-contents"><p class="caption">Contents</p><ul><li><a href="#g:1">Typeclass -</a></li><li><a href="#g:2">Transformer -</a></li><li><a href="#g:3">Utilities -</a></li><li><a href="#g:4">Re-exports from Control.Exception -</a></li></ul></div><div id="description"><p class="caption">Description</p><div class="doc"><p>This module supports monads that can throw extensible exceptions. The - exceptions are the very same from <a href="/Library/Frameworks/GHC.framework/Versions/7.4.1-x86_64/usr/share/doc/ghc/html/libraries/base-4.5.0.0/Control-Exception.html">Control.Exception</a>, and the operations - offered very similar, but here they are not limited to <code><a href="/Library/Frameworks/GHC.framework/Versions/7.4.1-x86_64/usr/share/doc/ghc/html/libraries/base-4.5.0.0/System-IO.html#t:IO">IO</a></code>. -</p><p>This code is in the style of both transformers and mtl, and is compatible +</script></head><body><div id="package-header"><ul class="links" id="page-menu"><li><a href="src/Control-Monad-Catch.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">exceptions-0.8.0.1: Extensible optionally-pure exceptions</p></div><div id="content"><div id="module-header"><table class="info"><tr><th>Copyright</th><td>(C) Edward Kmett 2013-2014, (c) Google Inc. 2012</td></tr><tr><th>License</th><td>BSD-style (see the file LICENSE)</td></tr><tr><th>Maintainer</th><td>Edward Kmett <ekmett@gmail.com></td></tr><tr><th>Stability</th><td>experimental</td></tr><tr><th>Portability</th><td>non-portable</td></tr><tr><th>Safe Haskell</th><td>Trustworthy</td></tr><tr><th>Language</th><td>Haskell98</td></tr></table><p class="caption">Control.Monad.Catch</p></div><div id="table-of-contents"><p class="caption">Contents</p><ul><li><a href="#g:1">Typeclass</a></li><li><a href="#g:2">Utilities</a></li><li><a href="#g:3">Re-exports from Control.Exception</a></li></ul></div><div id="description"><p class="caption">Description</p><div class="doc"><p>This module supports monads that can throw extensible exceptions. The + exceptions are the very same from <a href="file:///usr/local/share/doc/ghc/html/libraries/base-4.7.0.1/Control-Exception.html">Control.Exception</a>, and the operations + offered very similar, but here they are not limited to <code><a href="file:///usr/local/share/doc/ghc/html/libraries/base-4.7.0.1/System-IO.html#t:IO">IO</a></code>.</p><p>This code is in the style of both transformers and mtl, and is compatible with them, though doesn't mimic the module structure or offer the complete - range of features in those packages. -</p><p>This is very similar to <code>ErrorT</code> and <code>MonadError</code>, but based on features of - <a href="/Library/Frameworks/GHC.framework/Versions/7.4.1-x86_64/usr/share/doc/ghc/html/libraries/base-4.5.0.0/Control-Exception.html">Control.Exception</a>. In particular, it handles the complex case of + range of features in those packages.</p><p>This is very similar to <code>ErrorT</code> and <code>MonadError</code>, but based on features of + <a href="file:///usr/local/share/doc/ghc/html/libraries/base-4.7.0.1/Control-Exception.html">Control.Exception</a>. In particular, it handles the complex case of asynchronous exceptions by including <code><a href="Control-Monad-Catch.html#v:mask">mask</a></code> in the typeclass. Note that the - extensible extensions feature relies the RankNTypes language extension. -</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="/Library/Frameworks/GHC.framework/Versions/7.4.1-x86_64/usr/share/doc/ghc/html/libraries/base-4.5.0.0/Control-Monad.html#t:Monad">Monad</a> m => <a href="#t:MonadCatch">MonadCatch</a> m <span class="keyword">where</span><ul class="subs"><li><a href="#v:throwM">throwM</a> :: <a href="Control-Monad-Catch.html#t:Exception">Exception</a> e => e -> m a</li><li><a href="#v:catch">catch</a> :: <a href="Control-Monad-Catch.html#t:Exception">Exception</a> e => m a -> (e -> m a) -> m a</li><li><a href="#v:mask">mask</a> :: ((<span class="keyword">forall</span> a. m a -> m a) -> m b) -> m b</li></ul></li><li class="src short"><span class="keyword">newtype</span> <a href="#t:CatchT">CatchT</a> m a = <a href="#v:CatchT">CatchT</a> {<ul class="subs"><li><a href="#v:runCatchT">runCatchT</a> :: m (<a href="/Library/Frameworks/GHC.framework/Versions/7.4.1-x86_64/usr/share/doc/ghc/html/libraries/base-4.5.0.0/Data-Either.html#t:Either">Either</a> <a href="Control-Monad-Catch.html#t:SomeException">SomeException</a> a)</li></ul>}</li><li class="src short"><span class="keyword">type</span> <a href="#t:Catch">Catch</a> = <a href="Control-Monad-Catch.html#t:CatchT">CatchT</a> <a href="/Library/Haskell/ghc-7.4.1/lib/transformers-0.3.0.0/doc/html/Data-Functor-Identity.html#t:Identity">Identity</a></li><li class="src short"><a href="#v:runCatch">runCatch</a> :: <a href="Control-Monad-Catch.html#t:Catch">Catch</a> a -> <a href="/Library/Frameworks/GHC.framework/Versions/7.4.1-x86_64/usr/share/doc/ghc/html/libraries/base-4.5.0.0/Data-Either.html#t:Either">Either</a> <a href="Control-Monad-Catch.html#t:SomeException">SomeException</a> a</li><li class="src short"><a href="#v:mapCatchT">mapCatchT</a> :: (m (<a href="/Library/Frameworks/GHC.framework/Versions/7.4.1-x86_64/usr/share/doc/ghc/html/libraries/base-4.5.0.0/Data-Either.html#t:Either">Either</a> <a href="Control-Monad-Catch.html#t:SomeException">SomeException</a> a) -> n (<a href="/Library/Frameworks/GHC.framework/Versions/7.4.1-x86_64/usr/share/doc/ghc/html/libraries/base-4.5.0.0/Data-Either.html#t:Either">Either</a> <a href="Control-Monad-Catch.html#t:SomeException">SomeException</a> b)) -> <a href="Control-Monad-Catch.html#t:CatchT">CatchT</a> m a -> <a href="Control-Monad-Catch.html#t:CatchT">CatchT</a> n b</li><li class="src short"><a href="#v:catchAll">catchAll</a> :: <a href="Control-Monad-Catch.html#t:MonadCatch">MonadCatch</a> m => m a -> (<a href="Control-Monad-Catch.html#t:SomeException">SomeException</a> -> m a) -> m a</li><li class="src short"><a href="#v:catchIOError">catchIOError</a> :: <a href="Control-Monad-Catch.html#t:MonadCatch">MonadCatch</a> m => m a -> (<a href="/Library/Frameworks/GHC.framework/Versions/7.4.1-x86_64/usr/share/doc/ghc/html/libraries/base-4.5.0.0/System-IO-Error.html#t:IOError">IOError</a> -> m a) -> m a</li><li class="src short"><a href="#v:catchJust">catchJust</a> :: (<a href="Control-Monad-Catch.html#t:MonadCatch">MonadCatch</a> m, <a href="Control-Monad-Catch.html#t:Exception">Exception</a> e) => (e -> <a href="/Library/Frameworks/GHC.framework/Versions/7.4.1-x86_64/usr/share/doc/ghc/html/libraries/base-4.5.0.0/Data-Maybe.html#t:Maybe">Maybe</a> b) -> m a -> (b -> m a) -> m a</li><li class="src short"><a href="#v:catchIf">catchIf</a> :: (<a href="Control-Monad-Catch.html#t:MonadCatch">MonadCatch</a> m, <a href="Control-Monad-Catch.html#t:Exception">Exception</a> e) => (e -> <a href="/Library/Frameworks/GHC.framework/Versions/7.4.1-x86_64/usr/share/doc/ghc/html/libraries/base-4.5.0.0/Data-Bool.html#t:Bool">Bool</a>) -> m a -> (e -> m a) -> m a</li><li class="src short"><span class="keyword">data</span> <a href="#t:Handler">Handler</a> m a = <span class="keyword">forall</span> e . <a href="Control-Monad-Catch.html#t:Exception">Exception</a> e => <a href="#v:Handler">Handler</a> (e -> m a)</li><li class="src short"><a href="#v:catches">catches</a> :: (<a href="/Library/Frameworks/GHC.framework/Versions/7.4.1-x86_64/usr/share/doc/ghc/html/libraries/base-4.5.0.0/Data-Foldable.html#t:Foldable">Foldable</a> f, <a href="Control-Monad-Catch.html#t:MonadCatch">MonadCatch</a> m) => m a -> f (<a href="Control-Monad-Catch.html#t:Handler">Handler</a> m a) -> m a</li><li class="src short"><a href="#v:handle">handle</a> :: (<a href="Control-Monad-Catch.html#t:MonadCatch">MonadCatch</a> m, <a href="Control-Monad-Catch.html#t:Exception">Exception</a> e) => (e -> m a) -> m a -> m a</li><li class="src short"><a href="#v:handleJust">handleJust</a> :: (<a href="Control-Monad-Catch.html#t:MonadCatch">MonadCatch</a> m, <a href="Control-Monad-Catch.html#t:Exception">Exception</a> e) => (e -> <a href="/Library/Frameworks/GHC.framework/Versions/7.4.1-x86_64/usr/share/doc/ghc/html/libraries/base-4.5.0.0/Data-Maybe.html#t:Maybe">Maybe</a> b) -> (b -> m a) -> m a -> m a</li><li class="src short"><a href="#v:try">try</a> :: (<a href="Control-Monad-Catch.html#t:MonadCatch">MonadCatch</a> m, <a href="Control-Monad-Catch.html#t:Exception">Exception</a> e) => m a -> m (<a href="/Library/Frameworks/GHC.framework/Versions/7.4.1-x86_64/usr/share/doc/ghc/html/libraries/base-4.5.0.0/Data-Either.html#t:Either">Either</a> e a)</li><li class="src short"><a href="#v:tryJust">tryJust</a> :: (<a href="Control-Monad-Catch.html#t:MonadCatch">MonadCatch</a> m, <a href="Control-Monad-Catch.html#t:Exception">Exception</a> e) => (e -> <a href="/Library/Frameworks/GHC.framework/Versions/7.4.1-x86_64/usr/share/doc/ghc/html/libraries/base-4.5.0.0/Data-Maybe.html#t:Maybe">Maybe</a> b) -> m a -> m (<a href="/Library/Frameworks/GHC.framework/Versions/7.4.1-x86_64/usr/share/doc/ghc/html/libraries/base-4.5.0.0/Data-Either.html#t:Either">Either</a> b a)</li><li class="src short"><a href="#v:onException">onException</a> :: <a href="Control-Monad-Catch.html#t:MonadCatch">MonadCatch</a> m => m a -> m b -> m a</li><li class="src short"><a href="#v:bracket">bracket</a> :: <a href="Control-Monad-Catch.html#t:MonadCatch">MonadCatch</a> m => m a -> (a -> m b) -> (a -> m c) -> m c</li><li class="src short"><a href="#v:bracket_">bracket_</a> :: <a href="Control-Monad-Catch.html#t:MonadCatch">MonadCatch</a> m => m a -> m b -> m c -> m c</li><li class="src short"><a href="#v:finally">finally</a> :: <a href="Control-Monad-Catch.html#t:MonadCatch">MonadCatch</a> m => m a -> m b -> m a</li><li class="src short"><a href="#v:bracketOnError">bracketOnError</a> :: <a href="Control-Monad-Catch.html#t:MonadCatch">MonadCatch</a> m => m a -> (a -> m b) -> (a -> m c) -> m c</li><li class="src short"><span class="keyword">class</span> (<a href="/Library/Frameworks/GHC.framework/Versions/7.4.1-x86_64/usr/share/doc/ghc/html/libraries/base-4.5.0.0/Data-Typeable-Internal.html#t:Typeable">Typeable</a> e, <a href="/Library/Frameworks/GHC.framework/Versions/7.4.1-x86_64/usr/share/doc/ghc/html/libraries/base-4.5.0.0/Text-Show.html#t:Show">Show</a> e) => <a href="#t:Exception">Exception</a> e <span class="keyword">where</span><ul class="subs"><li><a href="#v:toException">toException</a> :: e -> <a href="Control-Monad-Catch.html#t:SomeException">SomeException</a></li><li><a href="#v:fromException">fromException</a> :: <a href="Control-Monad-Catch.html#t:SomeException">SomeException</a> -> <a href="/Library/Frameworks/GHC.framework/Versions/7.4.1-x86_64/usr/share/doc/ghc/html/libraries/base-4.5.0.0/Data-Maybe.html#t:Maybe">Maybe</a> e</li></ul></li><li class="src short"><span class="keyword">data</span> <a href="#t:SomeException">SomeException</a> <span class="keyword">where</span><ul class="subs"><li><a href="#v:SomeException">SomeException</a> :: <a href="Control-Monad-Catch.html#t:Exception">Exception</a> e => e -> <a href="Control-Monad-Catch.html#t:SomeException">SomeException</a> </li></ul></li></ul></div><div id="interface"><h1 id="g:1">Typeclass -</h1><div class="doc"><p>The mtl style typeclass -</p></div><div class="top"><p class="src"><span class="keyword">class</span> <a href="/Library/Frameworks/GHC.framework/Versions/7.4.1-x86_64/usr/share/doc/ghc/html/libraries/base-4.5.0.0/Control-Monad.html#t:Monad">Monad</a> m => <a name="t:MonadCatch" class="def">MonadCatch</a> m <span class="keyword">where</span><a href="src/Control-Monad-Catch.html#MonadCatch" class="link">Source</a></p><div class="subs methods"><p class="caption">Methods</p><p class="src"><a name="v:throwM" class="def">throwM</a> :: <a href="Control-Monad-Catch.html#t:Exception">Exception</a> e => e -> m a<a href="src/Control-Monad-Catch.html#throwM" class="link">Source</a></p><div class="doc"><p>Throw an exception. Note that this throws when this action is run in + extensible extensions feature relies on the RankNTypes language extension.</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="file:///usr/local/share/doc/ghc/html/libraries/base-4.7.0.1/Control-Monad.html#t:Monad">Monad</a> m => <a href="#t:MonadThrow">MonadThrow</a> m <span class="keyword">where</span><ul class="subs"><li><a href="#v:throwM">throwM</a> :: <a href="Control-Monad-Catch.html#t:Exception">Exception</a> e => e -> m a</li></ul></li><li class="src short"><span class="keyword">class</span> <a href="Control-Monad-Catch.html#t:MonadThrow">MonadThrow</a> m => <a href="#t:MonadCatch">MonadCatch</a> m <span class="keyword">where</span><ul class="subs"><li><a href="#v:catch">catch</a> :: <a href="Control-Monad-Catch.html#t:Exception">Exception</a> e => m a -> (e -> m a) -> m a</li></ul></li><li class="src short"><span class="keyword">class</span> <a href="Control-Monad-Catch.html#t:MonadCatch">MonadCatch</a> m => <a href="#t:MonadMask">MonadMask</a> m <span class="keyword">where</span><ul class="subs"><li><a href="#v:mask">mask</a> :: ((<span class="keyword">forall</span> a. m a -> m a) -> m b) -> m b</li><li><a href="#v:uninterruptibleMask">uninterruptibleMask</a> :: ((<span class="keyword">forall</span> a. m a -> m a) -> m b) -> m b</li></ul></li><li class="src short"><a href="#v:mask_">mask_</a> :: <a href="Control-Monad-Catch.html#t:MonadMask">MonadMask</a> m => m a -> m a</li><li class="src short"><a href="#v:uninterruptibleMask_">uninterruptibleMask_</a> :: <a href="Control-Monad-Catch.html#t:MonadMask">MonadMask</a> m => m a -> m a</li><li class="src short"><a href="#v:catchAll">catchAll</a> :: <a href="Control-Monad-Catch.html#t:MonadCatch">MonadCatch</a> m => m a -> (<a href="Control-Monad-Catch.html#t:SomeException">SomeException</a> -> m a) -> m a</li><li class="src short"><a href="#v:catchIOError">catchIOError</a> :: <a href="Control-Monad-Catch.html#t:MonadCatch">MonadCatch</a> m => m a -> (<a href="file:///usr/local/share/doc/ghc/html/libraries/base-4.7.0.1/System-IO-Error.html#t:IOError">IOError</a> -> m a) -> m a</li><li class="src short"><a href="#v:catchJust">catchJust</a> :: (<a href="Control-Monad-Catch.html#t:MonadCatch">MonadCatch</a> m, <a href="Control-Monad-Catch.html#t:Exception">Exception</a> e) => (e -> <a href="file:///usr/local/share/doc/ghc/html/libraries/base-4.7.0.1/Data-Maybe.html#t:Maybe">Maybe</a> b) -> m a -> (b -> m a) -> m a</li><li class="src short"><a href="#v:catchIf">catchIf</a> :: (<a href="Control-Monad-Catch.html#t:MonadCatch">MonadCatch</a> m, <a href="Control-Monad-Catch.html#t:Exception">Exception</a> e) => (e -> <a href="file:///usr/local/share/doc/ghc/html/libraries/base-4.7.0.1/Data-Bool.html#t:Bool">Bool</a>) -> m a -> (e -> m a) -> m a</li><li class="src short"><span class="keyword">data</span> <a href="#t:Handler">Handler</a> m a = <span class="keyword">forall</span> e . <a href="Control-Monad-Catch.html#t:Exception">Exception</a> e => <a href="#v:Handler">Handler</a> (e -> m a)</li><li class="src short"><a href="#v:catches">catches</a> :: (<a href="file:///usr/local/share/doc/ghc/html/libraries/base-4.7.0.1/Data-Foldable.html#t:Foldable">Foldable</a> f, <a href="Control-Monad-Catch.html#t:MonadCatch">MonadCatch</a> m) => m a -> f (<a href="Control-Monad-Catch.html#t:Handler">Handler</a> m a) -> m a</li><li class="src short"><a href="#v:handle">handle</a> :: (<a href="Control-Monad-Catch.html#t:MonadCatch">MonadCatch</a> m, <a href="Control-Monad-Catch.html#t:Exception">Exception</a> e) => (e -> m a) -> m a -> m a</li><li class="src short"><a href="#v:handleAll">handleAll</a> :: <a href="Control-Monad-Catch.html#t:MonadCatch">MonadCatch</a> m => (<a href="Control-Monad-Catch.html#t:SomeException">SomeException</a> -> m a) -> m a -> m a</li><li class="src short"><a href="#v:handleIOError">handleIOError</a> :: <a href="Control-Monad-Catch.html#t:MonadCatch">MonadCatch</a> m => (<a href="file:///usr/local/share/doc/ghc/html/libraries/base-4.7.0.1/System-IO-Error.html#t:IOError">IOError</a> -> m a) -> m a -> m a</li><li class="src short"><a href="#v:handleJust">handleJust</a> :: (<a href="Control-Monad-Catch.html#t:MonadCatch">MonadCatch</a> m, <a href="Control-Monad-Catch.html#t:Exception">Exception</a> e) => (e -> <a href="file:///usr/local/share/doc/ghc/html/libraries/base-4.7.0.1/Data-Maybe.html#t:Maybe">Maybe</a> b) -> (b -> m a) -> m a -> m a</li><li class="src short"><a href="#v:handleIf">handleIf</a> :: (<a href="Control-Monad-Catch.html#t:MonadCatch">MonadCatch</a> m, <a href="Control-Monad-Catch.html#t:Exception">Exception</a> e) => (e -> <a href="file:///usr/local/share/doc/ghc/html/libraries/base-4.7.0.1/Data-Bool.html#t:Bool">Bool</a>) -> (e -> m a) -> m a -> m a</li><li class="src short"><a href="#v:try">try</a> :: (<a href="Control-Monad-Catch.html#t:MonadCatch">MonadCatch</a> m, <a href="Control-Monad-Catch.html#t:Exception">Exception</a> e) => m a -> m (<a href="file:///usr/local/share/doc/ghc/html/libraries/base-4.7.0.1/Data-Either.html#t:Either">Either</a> e a)</li><li class="src short"><a href="#v:tryJust">tryJust</a> :: (<a href="Control-Monad-Catch.html#t:MonadCatch">MonadCatch</a> m, <a href="Control-Monad-Catch.html#t:Exception">Exception</a> e) => (e -> <a href="file:///usr/local/share/doc/ghc/html/libraries/base-4.7.0.1/Data-Maybe.html#t:Maybe">Maybe</a> b) -> m a -> m (<a href="file:///usr/local/share/doc/ghc/html/libraries/base-4.7.0.1/Data-Either.html#t:Either">Either</a> b a)</li><li class="src short"><a href="#v:onException">onException</a> :: <a href="Control-Monad-Catch.html#t:MonadCatch">MonadCatch</a> m => m a -> m b -> m a</li><li class="src short"><a href="#v:bracket">bracket</a> :: <a href="Control-Monad-Catch.html#t:MonadMask">MonadMask</a> m => m a -> (a -> m b) -> (a -> m c) -> m c</li><li class="src short"><a href="#v:bracket_">bracket_</a> :: <a href="Control-Monad-Catch.html#t:MonadMask">MonadMask</a> m => m a -> m b -> m c -> m c</li><li class="src short"><a href="#v:finally">finally</a> :: <a href="Control-Monad-Catch.html#t:MonadMask">MonadMask</a> m => m a -> m b -> m a</li><li class="src short"><a href="#v:bracketOnError">bracketOnError</a> :: <a href="Control-Monad-Catch.html#t:MonadMask">MonadMask</a> m => m a -> (a -> m b) -> (a -> m c) -> m c</li><li class="src short"><span class="keyword">class</span> (<a href="file:///usr/local/share/doc/ghc/html/libraries/base-4.7.0.1/Data-Typeable-Internal.html#t:Typeable">Typeable</a> * e, <a href="file:///usr/local/share/doc/ghc/html/libraries/base-4.7.0.1/Text-Show.html#t:Show">Show</a> e) => <a href="#t:Exception">Exception</a> e <span class="keyword">where</span><ul class="subs"><li><a href="#v:toException">toException</a> :: e -> <a href="Control-Monad-Catch.html#t:SomeException">SomeException</a></li><li><a href="#v:fromException">fromException</a> :: <a href="Control-Monad-Catch.html#t:SomeException">SomeException</a> -> <a href="file:///usr/local/share/doc/ghc/html/libraries/base-4.7.0.1/Data-Maybe.html#t:Maybe">Maybe</a> e</li></ul></li><li class="src short"><span class="keyword">data</span> <a href="#t:SomeException">SomeException</a> :: * <span class="keyword">where</span><ul class="subs"><li><a href="#v:SomeException">SomeException</a> :: <a href="Control-Monad-Catch.html#t:Exception">Exception</a> e => e -> <a href="Control-Monad-Catch.html#t:SomeException">SomeException</a></li></ul></li></ul></div><div id="interface"><h1 id="g:1">Typeclass</h1><div class="doc"><p>The mtl style typeclass</p></div><div class="top"><p class="src"><span class="keyword">class</span> <a href="file:///usr/local/share/doc/ghc/html/libraries/base-4.7.0.1/Control-Monad.html#t:Monad">Monad</a> m => <a name="t:MonadThrow" class="def">MonadThrow</a> m <span class="keyword">where</span> <a href="src/Control-Monad-Catch.html#MonadThrow" class="link">Source</a></p><div class="doc"><p>A class for monads in which exceptions may be thrown.</p><p>Instances should obey the following law:</p><pre>throwM e >> x = throwM e</pre><p>In other words, throwing an exception short-circuits the rest of the monadic + computation.</p></div><div class="subs methods"><p class="caption">Methods</p><p class="src"><a name="v:throwM" class="def">throwM</a> :: <a href="Control-Monad-Catch.html#t:Exception">Exception</a> e => e -> m a <a href="src/Control-Monad-Catch.html#throwM" class="link">Source</a></p><div class="doc"><p>Throw an exception. Note that this throws when this action is run in the monad <code>m</code>, not when it is applied. It is a generalization of - <a href="/Library/Frameworks/GHC.framework/Versions/7.4.1-x86_64/usr/share/doc/ghc/html/libraries/base-4.5.0.0/Control-Exception.html">Control.Exception</a>'s <code><a href="/Library/Frameworks/GHC.framework/Versions/7.4.1-x86_64/usr/share/doc/ghc/html/libraries/base-4.5.0.0/Control-Exception-Base.html#v:throwIO">throwIO</a></code>. -</p></div><p class="src"><a name="v:catch" class="def">catch</a> :: <a href="Control-Monad-Catch.html#t:Exception">Exception</a> e => m a -> (e -> m a) -> m a<a href="src/Control-Monad-Catch.html#catch" class="link">Source</a></p><div class="doc"><p>Provide a handler for exceptions thrown during execution of the first + <a href="file:///usr/local/share/doc/ghc/html/libraries/base-4.7.0.1/Control-Exception.html">Control.Exception</a>'s <code><a href="file:///usr/local/share/doc/ghc/html/libraries/base-4.7.0.1/Control-Exception-Base.html#v:throwIO">throwIO</a></code>.</p><p>Should satisfy the law:</p><pre>throwM e >> f = throwM e</pre></div></div><div class="subs instances"><p id="control.i:MonadThrow" class="caption collapser" onclick="toggleSection('i:MonadThrow')">Instances</p><div id="section.i:MonadThrow" class="show"><table><tr><td class="src"><a href="Control-Monad-Catch.html#t:MonadThrow">MonadThrow</a> []</td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Control-Monad-Catch.html#t:MonadThrow">MonadThrow</a> <a href="file:///usr/local/share/doc/ghc/html/libraries/base-4.7.0.1/System-IO.html#t:IO">IO</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Control-Monad-Catch.html#t:MonadThrow">MonadThrow</a> <a href="file:///usr/local/share/doc/ghc/html/libraries/base-4.7.0.1/GHC-Conc.html#t:STM">STM</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Control-Monad-Catch.html#t:MonadThrow">MonadThrow</a> <a href="file:///usr/local/share/doc/ghc/html/libraries/base-4.7.0.1/Data-Maybe.html#t:Maybe">Maybe</a></td><td class="doc empty"> </td></tr><tr><td class="src">(~) * e <a href="Control-Monad-Catch.html#t:SomeException">SomeException</a> => <a href="Control-Monad-Catch.html#t:MonadThrow">MonadThrow</a> (<a href="file:///usr/local/share/doc/ghc/html/libraries/base-4.7.0.1/Data-Either.html#t:Either">Either</a> e)</td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Control-Monad-Catch.html#t:MonadThrow">MonadThrow</a> m => <a href="Control-Monad-Catch.html#t:MonadThrow">MonadThrow</a> (ListT m)</td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Control-Monad-Catch.html#t:MonadThrow">MonadThrow</a> m => <a href="Control-Monad-Catch.html#t:MonadThrow">MonadThrow</a> (MaybeT m)</td><td class="doc"><p>Throws exceptions into the base monad.</p></td></tr><tr><td class="src"><a href="Control-Monad-Catch.html#t:MonadThrow">MonadThrow</a> m => <a href="Control-Monad-Catch.html#t:MonadThrow">MonadThrow</a> (IdentityT m)</td><td class="doc empty"> </td></tr><tr><td class="src"><a href="file:///usr/local/share/doc/ghc/html/libraries/base-4.7.0.1/Control-Monad.html#t:Monad">Monad</a> m => <a href="Control-Monad-Catch.html#t:MonadThrow">MonadThrow</a> (<a href="Control-Monad-Catch-Pure.html#t:CatchT">CatchT</a> m)</td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Control-Monad-Catch.html#t:MonadThrow">MonadThrow</a> m => <a href="Control-Monad-Catch.html#t:MonadThrow">MonadThrow</a> (StateT s m)</td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Control-Monad-Catch.html#t:MonadThrow">MonadThrow</a> m => <a href="Control-Monad-Catch.html#t:MonadThrow">MonadThrow</a> (StateT s m)</td><td class="doc empty"> </td></tr><tr><td class="src">(<a href="Control-Monad-Catch.html#t:MonadThrow">MonadThrow</a> m, <a href="file:///usr/local/share/doc/ghc/html/libraries/base-4.7.0.1/Data-Monoid.html#t:Monoid">Monoid</a> w) => <a href="Control-Monad-Catch.html#t:MonadThrow">MonadThrow</a> (WriterT w m)</td><td class="doc empty"> </td></tr><tr><td class="src">(<a href="Control-Monad-Catch.html#t:MonadThrow">MonadThrow</a> m, <a href="file:///usr/local/share/doc/ghc/html/libraries/base-4.7.0.1/Data-Monoid.html#t:Monoid">Monoid</a> w) => <a href="Control-Monad-Catch.html#t:MonadThrow">MonadThrow</a> (WriterT w m)</td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Control-Monad-Catch.html#t:MonadThrow">MonadThrow</a> m => <a href="Control-Monad-Catch.html#t:MonadThrow">MonadThrow</a> (ExceptT e m)</td><td class="doc"><p>Throws exceptions into the base monad.</p></td></tr><tr><td class="src">(Error e, <a href="Control-Monad-Catch.html#t:MonadThrow">MonadThrow</a> m) => <a href="Control-Monad-Catch.html#t:MonadThrow">MonadThrow</a> (ErrorT e m)</td><td class="doc"><p>Throws exceptions into the base monad.</p></td></tr><tr><td class="src"><a href="Control-Monad-Catch.html#t:MonadThrow">MonadThrow</a> m => <a href="Control-Monad-Catch.html#t:MonadThrow">MonadThrow</a> (ContT r m)</td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Control-Monad-Catch.html#t:MonadThrow">MonadThrow</a> m => <a href="Control-Monad-Catch.html#t:MonadThrow">MonadThrow</a> (ReaderT r m)</td><td class="doc empty"> </td></tr><tr><td class="src">(<a href="Control-Monad-Catch.html#t:MonadThrow">MonadThrow</a> m, <a href="file:///usr/local/share/doc/ghc/html/libraries/base-4.7.0.1/Data-Monoid.html#t:Monoid">Monoid</a> w) => <a href="Control-Monad-Catch.html#t:MonadThrow">MonadThrow</a> (RWST r w s m)</td><td class="doc empty"> </td></tr><tr><td class="src">(<a href="Control-Monad-Catch.html#t:MonadThrow">MonadThrow</a> m, <a href="file:///usr/local/share/doc/ghc/html/libraries/base-4.7.0.1/Data-Monoid.html#t:Monoid">Monoid</a> w) => <a href="Control-Monad-Catch.html#t:MonadThrow">MonadThrow</a> (RWST r w s m)</td><td class="doc empty"> </td></tr></table></div></div></div><div class="top"><p class="src"><span class="keyword">class</span> <a href="Control-Monad-Catch.html#t:MonadThrow">MonadThrow</a> m => <a name="t:MonadCatch" class="def">MonadCatch</a> m <span class="keyword">where</span> <a href="src/Control-Monad-Catch.html#MonadCatch" class="link">Source</a></p><div class="doc"><p>A class for monads which allow exceptions to be caught, in particular + exceptions which were thrown by <code><a href="Control-Monad-Catch.html#v:throwM">throwM</a></code>.</p><p>Instances should obey the following law:</p><pre>catch (throwM e) f = f e</pre><p>Note that the ability to catch an exception does <em>not</em> guarantee that we can + deal with all possible exit points from a computation. Some monads, such as + continuation-based stacks, allow for more than just a success/failure + strategy, and therefore <code>catch</code> <em>cannot</em> be used by those monads to properly + implement a function such as <code>finally</code>. For more information, see + <code><a href="Control-Monad-Catch.html#t:MonadMask">MonadMask</a></code>.</p></div><div class="subs methods"><p class="caption">Methods</p><p class="src"><a name="v:catch" class="def">catch</a> :: <a href="Control-Monad-Catch.html#t:Exception">Exception</a> e => m a -> (e -> m a) -> m a <a href="src/Control-Monad-Catch.html#catch" class="link">Source</a></p><div class="doc"><p>Provide a handler for exceptions thrown during execution of the first action. Note that type of the type of the argument to the handler will - constrain which exceptions are caught. See <a href="/Library/Frameworks/GHC.framework/Versions/7.4.1-x86_64/usr/share/doc/ghc/html/libraries/base-4.5.0.0/Control-Exception.html">Control.Exception</a>'s - <code><a href="/Library/Frameworks/GHC.framework/Versions/7.4.1-x86_64/usr/share/doc/ghc/html/libraries/base-4.5.0.0/Control-Exception-Base.html#v:catch">catch</a></code>. -</p></div><p class="src"><a name="v:mask" class="def">mask</a> :: ((<span class="keyword">forall</span> a. m a -> m a) -> m b) -> m b<a href="src/Control-Monad-Catch.html#mask" class="link">Source</a></p><div class="doc"><p>Runs an action with asynchronous exceptions diabled. The action is + constrain which exceptions are caught. See <a href="file:///usr/local/share/doc/ghc/html/libraries/base-4.7.0.1/Control-Exception.html">Control.Exception</a>'s + <code><a href="file:///usr/local/share/doc/ghc/html/libraries/base-4.7.0.1/Control-Exception-Base.html#v:catch">catch</a></code>.</p></div></div><div class="subs instances"><p id="control.i:MonadCatch" class="caption collapser" onclick="toggleSection('i:MonadCatch')">Instances</p><div id="section.i:MonadCatch" class="show"><table><tr><td class="src"><a href="Control-Monad-Catch.html#t:MonadCatch">MonadCatch</a> <a href="file:///usr/local/share/doc/ghc/html/libraries/base-4.7.0.1/System-IO.html#t:IO">IO</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Control-Monad-Catch.html#t:MonadCatch">MonadCatch</a> <a href="file:///usr/local/share/doc/ghc/html/libraries/base-4.7.0.1/GHC-Conc.html#t:STM">STM</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Control-Monad-Catch.html#t:MonadCatch">MonadCatch</a> m => <a href="Control-Monad-Catch.html#t:MonadCatch">MonadCatch</a> (ListT m)</td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Control-Monad-Catch.html#t:MonadCatch">MonadCatch</a> m => <a href="Control-Monad-Catch.html#t:MonadCatch">MonadCatch</a> (MaybeT m)</td><td class="doc"><p>Catches exceptions from the base monad.</p></td></tr><tr><td class="src"><a href="Control-Monad-Catch.html#t:MonadCatch">MonadCatch</a> m => <a href="Control-Monad-Catch.html#t:MonadCatch">MonadCatch</a> (IdentityT m)</td><td class="doc empty"> </td></tr><tr><td class="src"><a href="file:///usr/local/share/doc/ghc/html/libraries/base-4.7.0.1/Control-Monad.html#t:Monad">Monad</a> m => <a href="Control-Monad-Catch.html#t:MonadCatch">MonadCatch</a> (<a href="Control-Monad-Catch-Pure.html#t:CatchT">CatchT</a> m)</td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Control-Monad-Catch.html#t:MonadCatch">MonadCatch</a> m => <a href="Control-Monad-Catch.html#t:MonadCatch">MonadCatch</a> (StateT s m)</td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Control-Monad-Catch.html#t:MonadCatch">MonadCatch</a> m => <a href="Control-Monad-Catch.html#t:MonadCatch">MonadCatch</a> (StateT s m)</td><td class="doc empty"> </td></tr><tr><td class="src">(<a href="Control-Monad-Catch.html#t:MonadCatch">MonadCatch</a> m, <a href="file:///usr/local/share/doc/ghc/html/libraries/base-4.7.0.1/Data-Monoid.html#t:Monoid">Monoid</a> w) => <a href="Control-Monad-Catch.html#t:MonadCatch">MonadCatch</a> (WriterT w m)</td><td class="doc empty"> </td></tr><tr><td class="src">(<a href="Control-Monad-Catch.html#t:MonadCatch">MonadCatch</a> m, <a href="file:///usr/local/share/doc/ghc/html/libraries/base-4.7.0.1/Data-Monoid.html#t:Monoid">Monoid</a> w) => <a href="Control-Monad-Catch.html#t:MonadCatch">MonadCatch</a> (WriterT w m)</td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Control-Monad-Catch.html#t:MonadCatch">MonadCatch</a> m => <a href="Control-Monad-Catch.html#t:MonadCatch">MonadCatch</a> (ExceptT e m)</td><td class="doc"><p>Catches exceptions from the base monad.</p></td></tr><tr><td class="src">(Error e, <a href="Control-Monad-Catch.html#t:MonadCatch">MonadCatch</a> m) => <a href="Control-Monad-Catch.html#t:MonadCatch">MonadCatch</a> (ErrorT e m)</td><td class="doc"><p>Catches exceptions from the base monad.</p></td></tr><tr><td class="src"><a href="Control-Monad-Catch.html#t:MonadCatch">MonadCatch</a> m => <a href="Control-Monad-Catch.html#t:MonadCatch">MonadCatch</a> (ReaderT r m)</td><td class="doc empty"> </td></tr><tr><td class="src">(<a href="Control-Monad-Catch.html#t:MonadCatch">MonadCatch</a> m, <a href="file:///usr/local/share/doc/ghc/html/libraries/base-4.7.0.1/Data-Monoid.html#t:Monoid">Monoid</a> w) => <a href="Control-Monad-Catch.html#t:MonadCatch">MonadCatch</a> (RWST r w s m)</td><td class="doc empty"> </td></tr><tr><td class="src">(<a href="Control-Monad-Catch.html#t:MonadCatch">MonadCatch</a> m, <a href="file:///usr/local/share/doc/ghc/html/libraries/base-4.7.0.1/Data-Monoid.html#t:Monoid">Monoid</a> w) => <a href="Control-Monad-Catch.html#t:MonadCatch">MonadCatch</a> (RWST r w s m)</td><td class="doc empty"> </td></tr></table></div></div></div><div class="top"><p class="src"><span class="keyword">class</span> <a href="Control-Monad-Catch.html#t:MonadCatch">MonadCatch</a> m => <a name="t:MonadMask" class="def">MonadMask</a> m <span class="keyword">where</span> <a href="src/Control-Monad-Catch.html#MonadMask" class="link">Source</a></p><div class="doc"><p>A class for monads which provide for the ability to account for all + possible exit points from a computation, and to mask asynchronous + exceptions. Continuation-based monads, and stacks such as <code>ErrorT e IO</code> + which provide for multiple failure modes, are invalid instances of this + class.</p><p>Note that this package <em>does</em> provide a <code>MonadMask</code> instance for <code>CatchT</code>. + This instance is <em>only</em> valid if the base monad provides no ability to + provide multiple exit. For example, <code>IO</code> or <code>Either</code> would be invalid base + monads, but <code>Reader</code> or <code>State</code> would be acceptable.</p><p>Instances should ensure that, in the following code:</p><pre>f `finally` g</pre><p>The action <code>g</code> is called regardless of what occurs within <code>f</code>, including + async exceptions.</p></div><div class="subs methods"><p class="caption">Methods</p><p class="src"><a name="v:mask" class="def">mask</a> :: ((<span class="keyword">forall</span> a. m a -> m a) -> m b) -> m b <a href="src/Control-Monad-Catch.html#mask" class="link">Source</a></p><div class="doc"><p>Runs an action with asynchronous exceptions disabled. The action is provided a method for restoring the async. environment to what it was - at the <code><a href="Control-Monad-Catch.html#v:mask">mask</a></code> call. See <a href="/Library/Frameworks/GHC.framework/Versions/7.4.1-x86_64/usr/share/doc/ghc/html/libraries/base-4.5.0.0/Control-Exception.html">Control.Exception</a>'s <code><a href="/Library/Frameworks/GHC.framework/Versions/7.4.1-x86_64/usr/share/doc/ghc/html/libraries/base-4.5.0.0/Control-Exception-Base.html#v:mask">mask</a></code>. -</p></div></div><div class="subs instances"><p id="control.i:MonadCatch" class="caption collapser" onclick="toggleSection('i:MonadCatch')">Instances</p><div id="section.i:MonadCatch" class="show"><table><tr><td class="src"><a href="Control-Monad-Catch.html#t:MonadCatch">MonadCatch</a> <a href="/Library/Frameworks/GHC.framework/Versions/7.4.1-x86_64/usr/share/doc/ghc/html/libraries/base-4.5.0.0/System-IO.html#t:IO">IO</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Control-Monad-Catch.html#t:MonadCatch">MonadCatch</a> m => <a href="Control-Monad-Catch.html#t:MonadCatch">MonadCatch</a> (<a href="/Library/Haskell/ghc-7.4.1/lib/transformers-0.3.0.0/doc/html/Control-Monad-Trans-Identity.html#t:IdentityT">IdentityT</a> m)</td><td class="doc empty"> </td></tr><tr><td class="src"><a href="/Library/Frameworks/GHC.framework/Versions/7.4.1-x86_64/usr/share/doc/ghc/html/libraries/base-4.5.0.0/Control-Monad.html#t:Monad">Monad</a> m => <a href="Control-Monad-Catch.html#t:MonadCatch">MonadCatch</a> (<a href="Control-Monad-Catch.html#t:CatchT">CatchT</a> m)</td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Control-Monad-Catch.html#t:MonadCatch">MonadCatch</a> m => <a href="Control-Monad-Catch.html#t:MonadCatch">MonadCatch</a> (<a href="/Library/Haskell/ghc-7.4.1/lib/mtl-2.1.1/doc/html/Control-Monad-Reader.html#t:ReaderT">ReaderT</a> r m)</td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Control-Monad-Catch.html#t:MonadCatch">MonadCatch</a> m => <a href="Control-Monad-Catch.html#t:MonadCatch">MonadCatch</a> (<a href="/Library/Haskell/ghc-7.4.1/lib/mtl-2.1.1/doc/html/Control-Monad-State-Lazy.html#t:StateT">StateT</a> s m)</td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Control-Monad-Catch.html#t:MonadCatch">MonadCatch</a> m => <a href="Control-Monad-Catch.html#t:MonadCatch">MonadCatch</a> (<a href="/Library/Haskell/ghc-7.4.1/lib/mtl-2.1.1/doc/html/Control-Monad-State-Strict.html#t:StateT">StateT</a> s m)</td><td class="doc empty"> </td></tr><tr><td class="src">(<a href="Control-Monad-Catch.html#t:MonadCatch">MonadCatch</a> m, <a href="/Library/Frameworks/GHC.framework/Versions/7.4.1-x86_64/usr/share/doc/ghc/html/libraries/base-4.5.0.0/Data-Monoid.html#t:Monoid">Monoid</a> w) => <a href="Control-Monad-Catch.html#t:MonadCatch">MonadCatch</a> (<a href="/Library/Haskell/ghc-7.4.1/lib/mtl-2.1.1/doc/html/Control-Monad-Writer-Lazy.html#t:WriterT">WriterT</a> w m)</td><td class="doc empty"> </td></tr><tr><td class="src">(<a href="Control-Monad-Catch.html#t:MonadCatch">MonadCatch</a> m, <a href="/Library/Frameworks/GHC.framework/Versions/7.4.1-x86_64/usr/share/doc/ghc/html/libraries/base-4.5.0.0/Data-Monoid.html#t:Monoid">Monoid</a> w) => <a href="Control-Monad-Catch.html#t:MonadCatch">MonadCatch</a> (<a href="/Library/Haskell/ghc-7.4.1/lib/mtl-2.1.1/doc/html/Control-Monad-Writer-Strict.html#t:WriterT">WriterT</a> w m)</td><td class="doc empty"> </td></tr><tr><td class="src">(<a href="Control-Monad-Catch.html#t:MonadCatch">MonadCatch</a> m, <a href="/Library/Frameworks/GHC.framework/Versions/7.4.1-x86_64/usr/share/doc/ghc/html/libraries/base-4.5.0.0/Data-Monoid.html#t:Monoid">Monoid</a> w) => <a href="Control-Monad-Catch.html#t:MonadCatch">MonadCatch</a> (<a href="/Library/Haskell/ghc-7.4.1/lib/mtl-2.1.1/doc/html/Control-Monad-RWS-Lazy.html#t:RWST">RWST</a> r w s m)</td><td class="doc empty"> </td></tr><tr><td class="src">(<a href="Control-Monad-Catch.html#t:MonadCatch">MonadCatch</a> m, <a href="/Library/Frameworks/GHC.framework/Versions/7.4.1-x86_64/usr/share/doc/ghc/html/libraries/base-4.5.0.0/Data-Monoid.html#t:Monoid">Monoid</a> w) => <a href="Control-Monad-Catch.html#t:MonadCatch">MonadCatch</a> (<a href="/Library/Haskell/ghc-7.4.1/lib/mtl-2.1.1/doc/html/Control-Monad-RWS-Strict.html#t:RWST">RWST</a> r w s m)</td><td class="doc empty"> </td></tr></table></div></div></div><h1 id="g:2">Transformer -</h1><div class="doc"><p>The <code>transformers</code>-style monad transfomer -</p></div><div class="top"><p class="src"><span class="keyword">newtype</span> <a name="t:CatchT" class="def">CatchT</a> m a <a href="src/Control-Monad-Catch.html#CatchT" class="link">Source</a></p><div class="doc"><p>Add <code><a href="Control-Monad-Catch.html#t:Exception">Exception</a></code> handling abilities to a <code><a href="/Library/Frameworks/GHC.framework/Versions/7.4.1-x86_64/usr/share/doc/ghc/html/libraries/base-4.5.0.0/Control-Monad.html#t:Monad">Monad</a></code>. -</p></div><div class="subs constructors"><p class="caption">Constructors</p><table><tr><td class="src"><a name="v:CatchT" class="def">CatchT</a></td><td class="doc empty"> </td></tr><tr><td colspan="2"><div class="subs fields"><p class="caption">Fields</p><dl><dt class="src"><a name="v:runCatchT" class="def">runCatchT</a> :: m (<a href="/Library/Frameworks/GHC.framework/Versions/7.4.1-x86_64/usr/share/doc/ghc/html/libraries/base-4.5.0.0/Data-Either.html#t:Either">Either</a> <a href="Control-Monad-Catch.html#t:SomeException">SomeException</a> a)</dt><dd class="doc empty"> </dd></dl><div class="clear"></div></div></td></tr></table></div><div class="subs instances"><p id="control.i:CatchT" class="caption collapser" onclick="toggleSection('i:CatchT')">Instances</p><div id="section.i:CatchT" class="show"><table><tr><td class="src"><a href="/Library/Haskell/ghc-7.4.1/lib/transformers-0.3.0.0/doc/html/Control-Monad-Trans-Class.html#t:MonadTrans">MonadTrans</a> <a href="Control-Monad-Catch.html#t:CatchT">CatchT</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a href="/Library/Haskell/ghc-7.4.1/lib/mtl-2.1.1/doc/html/Control-Monad-RWS-Class.html#t:MonadRWS">MonadRWS</a> r w s m => <a href="/Library/Haskell/ghc-7.4.1/lib/mtl-2.1.1/doc/html/Control-Monad-RWS-Class.html#t:MonadRWS">MonadRWS</a> r w s (<a href="Control-Monad-Catch.html#t:CatchT">CatchT</a> m)</td><td class="doc empty"> </td></tr><tr><td class="src"><a href="/Library/Haskell/ghc-7.4.1/lib/mtl-2.1.1/doc/html/Control-Monad-Reader-Class.html#t:MonadReader">MonadReader</a> e m => <a href="/Library/Haskell/ghc-7.4.1/lib/mtl-2.1.1/doc/html/Control-Monad-Reader-Class.html#t:MonadReader">MonadReader</a> e (<a href="Control-Monad-Catch.html#t:CatchT">CatchT</a> m)</td><td class="doc empty"> </td></tr><tr><td class="src"><a href="/Library/Haskell/ghc-7.4.1/lib/mtl-2.1.1/doc/html/Control-Monad-State-Class.html#t:MonadState">MonadState</a> s m => <a href="/Library/Haskell/ghc-7.4.1/lib/mtl-2.1.1/doc/html/Control-Monad-State-Class.html#t:MonadState">MonadState</a> s (<a href="Control-Monad-Catch.html#t:CatchT">CatchT</a> m)</td><td class="doc empty"> </td></tr><tr><td class="src"><a href="/Library/Haskell/ghc-7.4.1/lib/mtl-2.1.1/doc/html/Control-Monad-Writer-Class.html#t:MonadWriter">MonadWriter</a> w m => <a href="/Library/Haskell/ghc-7.4.1/lib/mtl-2.1.1/doc/html/Control-Monad-Writer-Class.html#t:MonadWriter">MonadWriter</a> w (<a href="Control-Monad-Catch.html#t:CatchT">CatchT</a> m)</td><td class="doc empty"> </td></tr><tr><td class="src"><a href="/Library/Frameworks/GHC.framework/Versions/7.4.1-x86_64/usr/share/doc/ghc/html/libraries/base-4.5.0.0/Control-Monad.html#t:Monad">Monad</a> m => <a href="/Library/Frameworks/GHC.framework/Versions/7.4.1-x86_64/usr/share/doc/ghc/html/libraries/base-4.5.0.0/Control-Monad.html#t:Monad">Monad</a> (<a href="Control-Monad-Catch.html#t:CatchT">CatchT</a> m)</td><td class="doc empty"> </td></tr><tr><td class="src"><a href="/Library/Frameworks/GHC.framework/Versions/7.4.1-x86_64/usr/share/doc/ghc/html/libraries/base-4.5.0.0/Control-Monad.html#t:Monad">Monad</a> m => <a href="/Library/Frameworks/GHC.framework/Versions/7.4.1-x86_64/usr/share/doc/ghc/html/libraries/base-4.5.0.0/Control-Monad.html#t:Functor">Functor</a> (<a href="Control-Monad-Catch.html#t:CatchT">CatchT</a> m)</td><td class="doc empty"> </td></tr><tr><td class="src"><a href="/Library/Frameworks/GHC.framework/Versions/7.4.1-x86_64/usr/share/doc/ghc/html/libraries/base-4.5.0.0/Control-Monad-Fix.html#t:MonadFix">MonadFix</a> m => <a href="/Library/Frameworks/GHC.framework/Versions/7.4.1-x86_64/usr/share/doc/ghc/html/libraries/base-4.5.0.0/Control-Monad-Fix.html#t:MonadFix">MonadFix</a> (<a href="Control-Monad-Catch.html#t:CatchT">CatchT</a> m)</td><td class="doc empty"> </td></tr><tr><td class="src"><a href="/Library/Frameworks/GHC.framework/Versions/7.4.1-x86_64/usr/share/doc/ghc/html/libraries/base-4.5.0.0/Control-Monad.html#t:Monad">Monad</a> m => <a href="/Library/Frameworks/GHC.framework/Versions/7.4.1-x86_64/usr/share/doc/ghc/html/libraries/base-4.5.0.0/Control-Monad.html#t:MonadPlus">MonadPlus</a> (<a href="Control-Monad-Catch.html#t:CatchT">CatchT</a> m)</td><td class="doc empty"> </td></tr><tr><td class="src"><a href="/Library/Frameworks/GHC.framework/Versions/7.4.1-x86_64/usr/share/doc/ghc/html/libraries/base-4.5.0.0/Control-Monad.html#t:Monad">Monad</a> m => <a href="/Library/Frameworks/GHC.framework/Versions/7.4.1-x86_64/usr/share/doc/ghc/html/libraries/base-4.5.0.0/Control-Applicative.html#t:Applicative">Applicative</a> (<a href="Control-Monad-Catch.html#t:CatchT">CatchT</a> m)</td><td class="doc empty"> </td></tr><tr><td class="src"><a href="/Library/Frameworks/GHC.framework/Versions/7.4.1-x86_64/usr/share/doc/ghc/html/libraries/base-4.5.0.0/Data-Foldable.html#t:Foldable">Foldable</a> m => <a href="/Library/Frameworks/GHC.framework/Versions/7.4.1-x86_64/usr/share/doc/ghc/html/libraries/base-4.5.0.0/Data-Foldable.html#t:Foldable">Foldable</a> (<a href="Control-Monad-Catch.html#t:CatchT">CatchT</a> m)</td><td class="doc empty"> </td></tr><tr><td class="src">(<a href="/Library/Frameworks/GHC.framework/Versions/7.4.1-x86_64/usr/share/doc/ghc/html/libraries/base-4.5.0.0/Control-Monad.html#t:Monad">Monad</a> m, <a href="/Library/Frameworks/GHC.framework/Versions/7.4.1-x86_64/usr/share/doc/ghc/html/libraries/base-4.5.0.0/Data-Traversable.html#t:Traversable">Traversable</a> m) => <a href="/Library/Frameworks/GHC.framework/Versions/7.4.1-x86_64/usr/share/doc/ghc/html/libraries/base-4.5.0.0/Data-Traversable.html#t:Traversable">Traversable</a> (<a href="Control-Monad-Catch.html#t:CatchT">CatchT</a> m)</td><td class="doc empty"> </td></tr><tr><td class="src"><a href="/Library/Frameworks/GHC.framework/Versions/7.4.1-x86_64/usr/share/doc/ghc/html/libraries/base-4.5.0.0/Control-Monad.html#t:Monad">Monad</a> m => <a href="/Library/Frameworks/GHC.framework/Versions/7.4.1-x86_64/usr/share/doc/ghc/html/libraries/base-4.5.0.0/Control-Applicative.html#t:Alternative">Alternative</a> (<a href="Control-Monad-Catch.html#t:CatchT">CatchT</a> m)</td><td class="doc empty"> </td></tr><tr><td class="src"><a href="/Library/Haskell/ghc-7.4.1/lib/transformers-0.3.0.0/doc/html/Control-Monad-IO-Class.html#t:MonadIO">MonadIO</a> m => <a href="/Library/Haskell/ghc-7.4.1/lib/transformers-0.3.0.0/doc/html/Control-Monad-IO-Class.html#t:MonadIO">MonadIO</a> (<a href="Control-Monad-Catch.html#t:CatchT">CatchT</a> m)</td><td class="doc empty"> </td></tr><tr><td class="src"><a href="/Library/Frameworks/GHC.framework/Versions/7.4.1-x86_64/usr/share/doc/ghc/html/libraries/base-4.5.0.0/Control-Monad.html#t:Monad">Monad</a> m => <a href="Control-Monad-Catch.html#t:MonadCatch">MonadCatch</a> (<a href="Control-Monad-Catch.html#t:CatchT">CatchT</a> m)</td><td class="doc empty"> </td></tr></table></div></div></div><div class="top"><p class="src"><span class="keyword">type</span> <a name="t:Catch" class="def">Catch</a> = <a href="Control-Monad-Catch.html#t:CatchT">CatchT</a> <a href="/Library/Haskell/ghc-7.4.1/lib/transformers-0.3.0.0/doc/html/Data-Functor-Identity.html#t:Identity">Identity</a><a href="src/Control-Monad-Catch.html#Catch" class="link">Source</a></p></div><div class="top"><p class="src"><a name="v:runCatch" class="def">runCatch</a> :: <a href="Control-Monad-Catch.html#t:Catch">Catch</a> a -> <a href="/Library/Frameworks/GHC.framework/Versions/7.4.1-x86_64/usr/share/doc/ghc/html/libraries/base-4.5.0.0/Data-Either.html#t:Either">Either</a> <a href="Control-Monad-Catch.html#t:SomeException">SomeException</a> a<a href="src/Control-Monad-Catch.html#runCatch" class="link">Source</a></p></div><div class="top"><p class="src"><a name="v:mapCatchT" class="def">mapCatchT</a> :: (m (<a href="/Library/Frameworks/GHC.framework/Versions/7.4.1-x86_64/usr/share/doc/ghc/html/libraries/base-4.5.0.0/Data-Either.html#t:Either">Either</a> <a href="Control-Monad-Catch.html#t:SomeException">SomeException</a> a) -> n (<a href="/Library/Frameworks/GHC.framework/Versions/7.4.1-x86_64/usr/share/doc/ghc/html/libraries/base-4.5.0.0/Data-Either.html#t:Either">Either</a> <a href="Control-Monad-Catch.html#t:SomeException">SomeException</a> b)) -> <a href="Control-Monad-Catch.html#t:CatchT">CatchT</a> m a -> <a href="Control-Monad-Catch.html#t:CatchT">CatchT</a> n b<a href="src/Control-Monad-Catch.html#mapCatchT" class="link">Source</a></p><div class="doc"><p>Map the unwrapped computation using the given function. -</p><ul><li> <code><code>runErrorT</code> (<code>mapErrorT</code> f m) = f (<code>runErrorT</code> m</code>) -</li></ul></div></div><h1 id="g:3">Utilities -</h1><div class="doc"><p>These functions follow those from <a href="/Library/Frameworks/GHC.framework/Versions/7.4.1-x86_64/usr/share/doc/ghc/html/libraries/base-4.5.0.0/Control-Exception.html">Control.Exception</a>, except that they are + at the <code><a href="Control-Monad-Catch.html#v:mask">mask</a></code> call. See <a href="file:///usr/local/share/doc/ghc/html/libraries/base-4.7.0.1/Control-Exception.html">Control.Exception</a>'s <code><a href="file:///usr/local/share/doc/ghc/html/libraries/base-4.7.0.1/Control-Exception-Base.html#v:mask">mask</a></code>.</p></div><p class="src"><a name="v:uninterruptibleMask" class="def">uninterruptibleMask</a> :: ((<span class="keyword">forall</span> a. m a -> m a) -> m b) -> m b <a href="src/Control-Monad-Catch.html#uninterruptibleMask" class="link">Source</a></p><div class="doc"><p>Like <code><a href="Control-Monad-Catch.html#v:mask">mask</a></code>, but the masked computation is not interruptible (see + <a href="file:///usr/local/share/doc/ghc/html/libraries/base-4.7.0.1/Control-Exception.html">Control.Exception</a>'s <code><a href="file:///usr/local/share/doc/ghc/html/libraries/base-4.7.0.1/Control-Exception-Base.html#v:uninterruptibleMask">uninterruptibleMask</a></code>. WARNING: + Only use if you need to mask exceptions around an interruptible operation + AND you can guarantee the interruptible operation will only block for a + short period of time. Otherwise you render the program/thread unresponsive + and/or unkillable.</p></div></div><div class="subs instances"><p id="control.i:MonadMask" class="caption collapser" onclick="toggleSection('i:MonadMask')">Instances</p><div id="section.i:MonadMask" class="show"><table><tr><td class="src"><a href="Control-Monad-Catch.html#t:MonadMask">MonadMask</a> <a href="file:///usr/local/share/doc/ghc/html/libraries/base-4.7.0.1/System-IO.html#t:IO">IO</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Control-Monad-Catch.html#t:MonadMask">MonadMask</a> m => <a href="Control-Monad-Catch.html#t:MonadMask">MonadMask</a> (IdentityT m)</td><td class="doc empty"> </td></tr><tr><td class="src"><a href="file:///usr/local/share/doc/ghc/html/libraries/base-4.7.0.1/Control-Monad.html#t:Monad">Monad</a> m => <a href="Control-Monad-Catch.html#t:MonadMask">MonadMask</a> (<a href="Control-Monad-Catch-Pure.html#t:CatchT">CatchT</a> m)</td><td class="doc"><p>Note: This instance is only valid if the underlying monad has a single + exit point!</p></td></tr><tr><td class="src"><a href="Control-Monad-Catch.html#t:MonadMask">MonadMask</a> m => <a href="Control-Monad-Catch.html#t:MonadMask">MonadMask</a> (StateT s m)</td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Control-Monad-Catch.html#t:MonadMask">MonadMask</a> m => <a href="Control-Monad-Catch.html#t:MonadMask">MonadMask</a> (StateT s m)</td><td class="doc empty"> </td></tr><tr><td class="src">(<a href="Control-Monad-Catch.html#t:MonadMask">MonadMask</a> m, <a href="file:///usr/local/share/doc/ghc/html/libraries/base-4.7.0.1/Data-Monoid.html#t:Monoid">Monoid</a> w) => <a href="Control-Monad-Catch.html#t:MonadMask">MonadMask</a> (WriterT w m)</td><td class="doc empty"> </td></tr><tr><td class="src">(<a href="Control-Monad-Catch.html#t:MonadMask">MonadMask</a> m, <a href="file:///usr/local/share/doc/ghc/html/libraries/base-4.7.0.1/Data-Monoid.html#t:Monoid">Monoid</a> w) => <a href="Control-Monad-Catch.html#t:MonadMask">MonadMask</a> (WriterT w m)</td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Control-Monad-Catch.html#t:MonadMask">MonadMask</a> m => <a href="Control-Monad-Catch.html#t:MonadMask">MonadMask</a> (ReaderT r m)</td><td class="doc empty"> </td></tr><tr><td class="src">(<a href="Control-Monad-Catch.html#t:MonadMask">MonadMask</a> m, <a href="file:///usr/local/share/doc/ghc/html/libraries/base-4.7.0.1/Data-Monoid.html#t:Monoid">Monoid</a> w) => <a href="Control-Monad-Catch.html#t:MonadMask">MonadMask</a> (RWST r w s m)</td><td class="doc empty"> </td></tr><tr><td class="src">(<a href="Control-Monad-Catch.html#t:MonadMask">MonadMask</a> m, <a href="file:///usr/local/share/doc/ghc/html/libraries/base-4.7.0.1/Data-Monoid.html#t:Monoid">Monoid</a> w) => <a href="Control-Monad-Catch.html#t:MonadMask">MonadMask</a> (RWST r w s m)</td><td class="doc empty"> </td></tr></table></div></div></div><h1 id="g:2">Utilities</h1><div class="doc"><p>These functions follow those from <a href="file:///usr/local/share/doc/ghc/html/libraries/base-4.7.0.1/Control-Exception.html">Control.Exception</a>, except that they are based on methods from the <code><a href="Control-Monad-Catch.html#t:MonadCatch">MonadCatch</a></code> typeclass. See - <a href="/Library/Frameworks/GHC.framework/Versions/7.4.1-x86_64/usr/share/doc/ghc/html/libraries/base-4.5.0.0/Control-Exception.html">Control.Exception</a> for API usage. -</p></div><div class="top"><p class="src"><a name="v:catchAll" class="def">catchAll</a> :: <a href="Control-Monad-Catch.html#t:MonadCatch">MonadCatch</a> m => m a -> (<a href="Control-Monad-Catch.html#t:SomeException">SomeException</a> -> m a) -> m a<a href="src/Control-Monad-Catch.html#catchAll" class="link">Source</a></p><div class="doc"><p>Catches all exceptions, and somewhat defeats the purpose of the extensible - exception system. Use sparingly. -</p></div></div><div class="top"><p class="src"><a name="v:catchIOError" class="def">catchIOError</a> :: <a href="Control-Monad-Catch.html#t:MonadCatch">MonadCatch</a> m => m a -> (<a href="/Library/Frameworks/GHC.framework/Versions/7.4.1-x86_64/usr/share/doc/ghc/html/libraries/base-4.5.0.0/System-IO-Error.html#t:IOError">IOError</a> -> m a) -> m a<a href="src/Control-Monad-Catch.html#catchIOError" class="link">Source</a></p><div class="doc"><p>Catch all <code><a href="/Library/Frameworks/GHC.framework/Versions/7.4.1-x86_64/usr/share/doc/ghc/html/libraries/base-4.5.0.0/System-IO-Error.html#t:IOError">IOError</a></code> (eqv. <code>IOException</code>) exceptions. Still somewhat too + <a href="file:///usr/local/share/doc/ghc/html/libraries/base-4.7.0.1/Control-Exception.html">Control.Exception</a> for API usage.</p></div><div class="top"><p class="src"><a name="v:mask_" class="def">mask_</a> :: <a href="Control-Monad-Catch.html#t:MonadMask">MonadMask</a> m => m a -> m a <a href="src/Control-Monad-Catch.html#mask_" class="link">Source</a></p><div class="doc"><p>Like <code><a href="Control-Monad-Catch.html#v:mask">mask</a></code>, but does not pass a <code>restore</code> action to the argument.</p></div></div><div class="top"><p class="src"><a name="v:uninterruptibleMask_" class="def">uninterruptibleMask_</a> :: <a href="Control-Monad-Catch.html#t:MonadMask">MonadMask</a> m => m a -> m a <a href="src/Control-Monad-Catch.html#uninterruptibleMask_" class="link">Source</a></p><div class="doc"><p>Like <code><a href="Control-Monad-Catch.html#v:uninterruptibleMask">uninterruptibleMask</a></code>, but does not pass a <code>restore</code> action to the + argument.</p></div></div><div class="top"><p class="src"><a name="v:catchAll" class="def">catchAll</a> :: <a href="Control-Monad-Catch.html#t:MonadCatch">MonadCatch</a> m => m a -> (<a href="Control-Monad-Catch.html#t:SomeException">SomeException</a> -> m a) -> m a <a href="src/Control-Monad-Catch.html#catchAll" class="link">Source</a></p><div class="doc"><p>Catches all exceptions, and somewhat defeats the purpose of the extensible + exception system. Use sparingly.</p></div></div><div class="top"><p class="src"><a name="v:catchIOError" class="def">catchIOError</a> :: <a href="Control-Monad-Catch.html#t:MonadCatch">MonadCatch</a> m => m a -> (<a href="file:///usr/local/share/doc/ghc/html/libraries/base-4.7.0.1/System-IO-Error.html#t:IOError">IOError</a> -> m a) -> m a <a href="src/Control-Monad-Catch.html#catchIOError" class="link">Source</a></p><div class="doc"><p>Catch all <code><a href="file:///usr/local/share/doc/ghc/html/libraries/base-4.7.0.1/System-IO-Error.html#t:IOError">IOError</a></code> (eqv. <code>IOException</code>) exceptions. Still somewhat too general, but better than using <code><a href="Control-Monad-Catch.html#v:catchAll">catchAll</a></code>. See <code><a href="Control-Monad-Catch.html#v:catchIf">catchIf</a></code> for an easy way - of catching specific <code><a href="/Library/Frameworks/GHC.framework/Versions/7.4.1-x86_64/usr/share/doc/ghc/html/libraries/base-4.5.0.0/System-IO-Error.html#t:IOError">IOError</a></code>s based on the predicates in <a href="/Library/Frameworks/GHC.framework/Versions/7.4.1-x86_64/usr/share/doc/ghc/html/libraries/base-4.5.0.0/System-IO-Error.html">System.IO.Error</a>. -</p></div></div><div class="top"><p class="src"><a name="v:catchJust" class="def">catchJust</a> :: (<a href="Control-Monad-Catch.html#t:MonadCatch">MonadCatch</a> m, <a href="Control-Monad-Catch.html#t:Exception">Exception</a> e) => (e -> <a href="/Library/Frameworks/GHC.framework/Versions/7.4.1-x86_64/usr/share/doc/ghc/html/libraries/base-4.5.0.0/Data-Maybe.html#t:Maybe">Maybe</a> b) -> m a -> (b -> m a) -> m a<a href="src/Control-Monad-Catch.html#catchJust" class="link">Source</a></p><div class="doc"><p>A more generalized way of determining which exceptions to catch at - run time. -</p></div></div><div class="top"><p class="src"><a name="v:catchIf" class="def">catchIf</a> :: (<a href="Control-Monad-Catch.html#t:MonadCatch">MonadCatch</a> m, <a href="Control-Monad-Catch.html#t:Exception">Exception</a> e) => (e -> <a href="/Library/Frameworks/GHC.framework/Versions/7.4.1-x86_64/usr/share/doc/ghc/html/libraries/base-4.5.0.0/Data-Bool.html#t:Bool">Bool</a>) -> m a -> (e -> m a) -> m a<a href="src/Control-Monad-Catch.html#catchIf" class="link">Source</a></p><div class="doc"><p>Catch exceptions only if they pass some predicate. Often useful with the - predicates for testing <code><a href="/Library/Frameworks/GHC.framework/Versions/7.4.1-x86_64/usr/share/doc/ghc/html/libraries/base-4.5.0.0/System-IO-Error.html#t:IOError">IOError</a></code> values in <a href="/Library/Frameworks/GHC.framework/Versions/7.4.1-x86_64/usr/share/doc/ghc/html/libraries/base-4.5.0.0/System-IO-Error.html">System.IO.Error</a>. -</p></div></div><div class="top"><p class="src"><span class="keyword">data</span> <a name="t:Handler" class="def">Handler</a> m a <a href="src/Control-Monad-Catch.html#Handler" class="link">Source</a></p><div class="doc"><p>Generalized version of <code><a href="/Library/Frameworks/GHC.framework/Versions/7.4.1-x86_64/usr/share/doc/ghc/html/libraries/base-4.5.0.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="Control-Monad-Catch.html#t:Exception">Exception</a> e => <a name="v:Handler" class="def">Handler</a> (e -> m a)</td><td class="doc empty"> </td></tr></table></div><div class="subs instances"><p id="control.i:Handler" class="caption collapser" onclick="toggleSection('i:Handler')">Instances</p><div id="section.i:Handler" class="show"><table><tr><td class="src"><a href="/Library/Frameworks/GHC.framework/Versions/7.4.1-x86_64/usr/share/doc/ghc/html/libraries/base-4.5.0.0/Control-Monad.html#t:Monad">Monad</a> m => <a href="/Library/Frameworks/GHC.framework/Versions/7.4.1-x86_64/usr/share/doc/ghc/html/libraries/base-4.5.0.0/Control-Monad.html#t:Functor">Functor</a> (<a href="Control-Monad-Catch.html#t:Handler">Handler</a> m)</td><td class="doc empty"> </td></tr></table></div></div></div><div class="top"><p class="src"><a name="v:catches" class="def">catches</a> :: (<a href="/Library/Frameworks/GHC.framework/Versions/7.4.1-x86_64/usr/share/doc/ghc/html/libraries/base-4.5.0.0/Data-Foldable.html#t:Foldable">Foldable</a> f, <a href="Control-Monad-Catch.html#t:MonadCatch">MonadCatch</a> m) => m a -> f (<a href="Control-Monad-Catch.html#t:Handler">Handler</a> m a) -> m a<a href="src/Control-Monad-Catch.html#catches" class="link">Source</a></p><div class="doc"><p>Catches different sorts of exceptions. See <a href="/Library/Frameworks/GHC.framework/Versions/7.4.1-x86_64/usr/share/doc/ghc/html/libraries/base-4.5.0.0/Control-Exception.html">Control.Exception</a>'s <code><a href="/Library/Frameworks/GHC.framework/Versions/7.4.1-x86_64/usr/share/doc/ghc/html/libraries/base-4.5.0.0/Control-Exception.html#v:catches">catches</a></code> -</p></div></div><div class="top"><p class="src"><a name="v:handle" class="def">handle</a> :: (<a href="Control-Monad-Catch.html#t:MonadCatch">MonadCatch</a> m, <a href="Control-Monad-Catch.html#t:Exception">Exception</a> e) => (e -> m a) -> m a -> m a<a href="src/Control-Monad-Catch.html#handle" class="link">Source</a></p><div class="doc"><p>Flipped <code><a href="Control-Monad-Catch.html#v:catch">catch</a></code>. See <a href="/Library/Frameworks/GHC.framework/Versions/7.4.1-x86_64/usr/share/doc/ghc/html/libraries/base-4.5.0.0/Control-Exception.html">Control.Exception</a>'s <code><a href="/Library/Frameworks/GHC.framework/Versions/7.4.1-x86_64/usr/share/doc/ghc/html/libraries/base-4.5.0.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="Control-Monad-Catch.html#t:MonadCatch">MonadCatch</a> m, <a href="Control-Monad-Catch.html#t:Exception">Exception</a> e) => (e -> <a href="/Library/Frameworks/GHC.framework/Versions/7.4.1-x86_64/usr/share/doc/ghc/html/libraries/base-4.5.0.0/Data-Maybe.html#t:Maybe">Maybe</a> b) -> (b -> m a) -> m a -> m a<a href="src/Control-Monad-Catch.html#handleJust" class="link">Source</a></p><div class="doc"><p>Flipped <code><a href="Control-Monad-Catch.html#v:catchJust">catchJust</a></code>. See <a href="/Library/Frameworks/GHC.framework/Versions/7.4.1-x86_64/usr/share/doc/ghc/html/libraries/base-4.5.0.0/Control-Exception.html">Control.Exception</a>'s <code><a href="/Library/Frameworks/GHC.framework/Versions/7.4.1-x86_64/usr/share/doc/ghc/html/libraries/base-4.5.0.0/Control-Exception-Base.html#v:handleJust">handleJust</a></code>. -</p></div></div><div class="top"><p class="src"><a name="v:try" class="def">try</a> :: (<a href="Control-Monad-Catch.html#t:MonadCatch">MonadCatch</a> m, <a href="Control-Monad-Catch.html#t:Exception">Exception</a> e) => m a -> m (<a href="/Library/Frameworks/GHC.framework/Versions/7.4.1-x86_64/usr/share/doc/ghc/html/libraries/base-4.5.0.0/Data-Either.html#t:Either">Either</a> e a)<a href="src/Control-Monad-Catch.html#try" class="link">Source</a></p><div class="doc"><p>Similar to <code><a href="Control-Monad-Catch.html#v:catch">catch</a></code>, but returns an <code><a href="/Library/Frameworks/GHC.framework/Versions/7.4.1-x86_64/usr/share/doc/ghc/html/libraries/base-4.5.0.0/Data-Either.html#t:Either">Either</a></code> result. See <a href="/Library/Frameworks/GHC.framework/Versions/7.4.1-x86_64/usr/share/doc/ghc/html/libraries/base-4.5.0.0/Control-Exception.html">Control.Exception</a>'s - <code><a href="/Library/Frameworks/GHC.framework/Versions/7.4.1-x86_64/usr/share/doc/ghc/html/libraries/base-4.5.0.0/Control-Exception.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="Control-Monad-Catch.html#t:MonadCatch">MonadCatch</a> m, <a href="Control-Monad-Catch.html#t:Exception">Exception</a> e) => (e -> <a href="/Library/Frameworks/GHC.framework/Versions/7.4.1-x86_64/usr/share/doc/ghc/html/libraries/base-4.5.0.0/Data-Maybe.html#t:Maybe">Maybe</a> b) -> m a -> m (<a href="/Library/Frameworks/GHC.framework/Versions/7.4.1-x86_64/usr/share/doc/ghc/html/libraries/base-4.5.0.0/Data-Either.html#t:Either">Either</a> b a)<a href="src/Control-Monad-Catch.html#tryJust" class="link">Source</a></p><div class="doc"><p>A variant of <code><a href="Control-Monad-Catch.html#v:try">try</a></code> that takes an exception predicate to select - which exceptions are caught. See <a href="/Library/Frameworks/GHC.framework/Versions/7.4.1-x86_64/usr/share/doc/ghc/html/libraries/base-4.5.0.0/Control-Exception.html">Control.Exception</a>'s <code><a href="/Library/Frameworks/GHC.framework/Versions/7.4.1-x86_64/usr/share/doc/ghc/html/libraries/base-4.5.0.0/Control-Exception-Base.html#v:tryJust">tryJust</a></code> -</p></div></div><div class="top"><p class="src"><a name="v:onException" class="def">onException</a> :: <a href="Control-Monad-Catch.html#t:MonadCatch">MonadCatch</a> m => m a -> m b -> m a<a href="src/Control-Monad-Catch.html#onException" class="link">Source</a></p><div class="doc"><p>Run an action only if an exception is thrown in the main action. The - exception is not caught, simply rethrown. -</p></div></div><div class="top"><p class="src"><a name="v:bracket" class="def">bracket</a> :: <a href="Control-Monad-Catch.html#t:MonadCatch">MonadCatch</a> m => m a -> (a -> m b) -> (a -> m c) -> m c<a href="src/Control-Monad-Catch.html#bracket" class="link">Source</a></p><div class="doc"><p>Generalized abstracted pattern of safe resource acquisition and release + of catching specific <code><a href="file:///usr/local/share/doc/ghc/html/libraries/base-4.7.0.1/System-IO-Error.html#t:IOError">IOError</a></code>s based on the predicates in <a href="file:///usr/local/share/doc/ghc/html/libraries/base-4.7.0.1/System-IO-Error.html">System.IO.Error</a>.</p></div></div><div class="top"><p class="src"><a name="v:catchJust" class="def">catchJust</a> :: (<a href="Control-Monad-Catch.html#t:MonadCatch">MonadCatch</a> m, <a href="Control-Monad-Catch.html#t:Exception">Exception</a> e) => (e -> <a href="file:///usr/local/share/doc/ghc/html/libraries/base-4.7.0.1/Data-Maybe.html#t:Maybe">Maybe</a> b) -> m a -> (b -> m a) -> m a <a href="src/Control-Monad-Catch.html#catchJust" class="link">Source</a></p><div class="doc"><p>A more generalized way of determining which exceptions to catch at + run time.</p></div></div><div class="top"><p class="src"><a name="v:catchIf" class="def">catchIf</a> :: (<a href="Control-Monad-Catch.html#t:MonadCatch">MonadCatch</a> m, <a href="Control-Monad-Catch.html#t:Exception">Exception</a> e) => (e -> <a href="file:///usr/local/share/doc/ghc/html/libraries/base-4.7.0.1/Data-Bool.html#t:Bool">Bool</a>) -> m a -> (e -> m a) -> m a <a href="src/Control-Monad-Catch.html#catchIf" class="link">Source</a></p><div class="doc"><p>Catch exceptions only if they pass some predicate. Often useful with the + predicates for testing <code><a href="file:///usr/local/share/doc/ghc/html/libraries/base-4.7.0.1/System-IO-Error.html#t:IOError">IOError</a></code> values in <a href="file:///usr/local/share/doc/ghc/html/libraries/base-4.7.0.1/System-IO-Error.html">System.IO.Error</a>.</p></div></div><div class="top"><p class="src"><span class="keyword">data</span> <a name="t:Handler" class="def">Handler</a> m a <a href="src/Control-Monad-Catch.html#Handler" class="link">Source</a></p><div class="doc"><p>Generalized version of <code><a href="file:///usr/local/share/doc/ghc/html/libraries/base-4.7.0.1/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="Control-Monad-Catch.html#t:Exception">Exception</a> e => <a name="v:Handler" class="def">Handler</a> (e -> m a)</td><td class="doc empty"> </td></tr></table></div><div class="subs instances"><p id="control.i:Handler" class="caption collapser" onclick="toggleSection('i:Handler')">Instances</p><div id="section.i:Handler" class="show"><table><tr><td class="src"><a href="file:///usr/local/share/doc/ghc/html/libraries/base-4.7.0.1/Control-Monad.html#t:Monad">Monad</a> m => <a href="file:///usr/local/share/doc/ghc/html/libraries/base-4.7.0.1/Control-Monad.html#t:Functor">Functor</a> (<a href="Control-Monad-Catch.html#t:Handler">Handler</a> m)</td><td class="doc empty"> </td></tr></table></div></div></div><div class="top"><p class="src"><a name="v:catches" class="def">catches</a> :: (<a href="file:///usr/local/share/doc/ghc/html/libraries/base-4.7.0.1/Data-Foldable.html#t:Foldable">Foldable</a> f, <a href="Control-Monad-Catch.html#t:MonadCatch">MonadCatch</a> m) => m a -> f (<a href="Control-Monad-Catch.html#t:Handler">Handler</a> m a) -> m a <a href="src/Control-Monad-Catch.html#catches" class="link">Source</a></p><div class="doc"><p>Catches different sorts of exceptions. See <a href="file:///usr/local/share/doc/ghc/html/libraries/base-4.7.0.1/Control-Exception.html">Control.Exception</a>'s <code><a href="file:///usr/local/share/doc/ghc/html/libraries/base-4.7.0.1/Control-Exception.html#v:catches">catches</a></code></p></div></div><div class="top"><p class="src"><a name="v:handle" class="def">handle</a> :: (<a href="Control-Monad-Catch.html#t:MonadCatch">MonadCatch</a> m, <a href="Control-Monad-Catch.html#t:Exception">Exception</a> e) => (e -> m a) -> m a -> m a <a href="src/Control-Monad-Catch.html#handle" class="link">Source</a></p><div class="doc"><p>Flipped <code><a href="Control-Monad-Catch.html#v:catch">catch</a></code>. See <a href="file:///usr/local/share/doc/ghc/html/libraries/base-4.7.0.1/Control-Exception.html">Control.Exception</a>'s <code><a href="file:///usr/local/share/doc/ghc/html/libraries/base-4.7.0.1/Control-Exception-Base.html#v:handle">handle</a></code>.</p></div></div><div class="top"><p class="src"><a name="v:handleAll" class="def">handleAll</a> :: <a href="Control-Monad-Catch.html#t:MonadCatch">MonadCatch</a> m => (<a href="Control-Monad-Catch.html#t:SomeException">SomeException</a> -> m a) -> m a -> m a <a href="src/Control-Monad-Catch.html#handleAll" class="link">Source</a></p><div class="doc"><p>Flipped <code><a href="Control-Monad-Catch.html#v:catchAll">catchAll</a></code></p></div></div><div class="top"><p class="src"><a name="v:handleIOError" class="def">handleIOError</a> :: <a href="Control-Monad-Catch.html#t:MonadCatch">MonadCatch</a> m => (<a href="file:///usr/local/share/doc/ghc/html/libraries/base-4.7.0.1/System-IO-Error.html#t:IOError">IOError</a> -> m a) -> m a -> m a <a href="src/Control-Monad-Catch.html#handleIOError" class="link">Source</a></p><div class="doc"><p>Flipped <code><a href="Control-Monad-Catch.html#v:catchIOError">catchIOError</a></code></p></div></div><div class="top"><p class="src"><a name="v:handleJust" class="def">handleJust</a> :: (<a href="Control-Monad-Catch.html#t:MonadCatch">MonadCatch</a> m, <a href="Control-Monad-Catch.html#t:Exception">Exception</a> e) => (e -> <a href="file:///usr/local/share/doc/ghc/html/libraries/base-4.7.0.1/Data-Maybe.html#t:Maybe">Maybe</a> b) -> (b -> m a) -> m a -> m a <a href="src/Control-Monad-Catch.html#handleJust" class="link">Source</a></p><div class="doc"><p>Flipped <code><a href="Control-Monad-Catch.html#v:catchJust">catchJust</a></code>. See <a href="file:///usr/local/share/doc/ghc/html/libraries/base-4.7.0.1/Control-Exception.html">Control.Exception</a>'s <code><a href="file:///usr/local/share/doc/ghc/html/libraries/base-4.7.0.1/Control-Exception-Base.html#v:handleJust">handleJust</a></code>.</p></div></div><div class="top"><p class="src"><a name="v:handleIf" class="def">handleIf</a> :: (<a href="Control-Monad-Catch.html#t:MonadCatch">MonadCatch</a> m, <a href="Control-Monad-Catch.html#t:Exception">Exception</a> e) => (e -> <a href="file:///usr/local/share/doc/ghc/html/libraries/base-4.7.0.1/Data-Bool.html#t:Bool">Bool</a>) -> (e -> m a) -> m a -> m a <a href="src/Control-Monad-Catch.html#handleIf" class="link">Source</a></p><div class="doc"><p>Flipped <code><a href="Control-Monad-Catch.html#v:catchIf">catchIf</a></code></p></div></div><div class="top"><p class="src"><a name="v:try" class="def">try</a> :: (<a href="Control-Monad-Catch.html#t:MonadCatch">MonadCatch</a> m, <a href="Control-Monad-Catch.html#t:Exception">Exception</a> e) => m a -> m (<a href="file:///usr/local/share/doc/ghc/html/libraries/base-4.7.0.1/Data-Either.html#t:Either">Either</a> e a) <a href="src/Control-Monad-Catch.html#try" class="link">Source</a></p><div class="doc"><p>Similar to <code><a href="Control-Monad-Catch.html#v:catch">catch</a></code>, but returns an <code><a href="file:///usr/local/share/doc/ghc/html/libraries/base-4.7.0.1/Data-Either.html#t:Either">Either</a></code> result. See <a href="file:///usr/local/share/doc/ghc/html/libraries/base-4.7.0.1/Control-Exception.html">Control.Exception</a>'s + <code><a href="file:///usr/local/share/doc/ghc/html/libraries/base-4.7.0.1/Control-Exception.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="Control-Monad-Catch.html#t:MonadCatch">MonadCatch</a> m, <a href="Control-Monad-Catch.html#t:Exception">Exception</a> e) => (e -> <a href="file:///usr/local/share/doc/ghc/html/libraries/base-4.7.0.1/Data-Maybe.html#t:Maybe">Maybe</a> b) -> m a -> m (<a href="file:///usr/local/share/doc/ghc/html/libraries/base-4.7.0.1/Data-Either.html#t:Either">Either</a> b a) <a href="src/Control-Monad-Catch.html#tryJust" class="link">Source</a></p><div class="doc"><p>A variant of <code><a href="Control-Monad-Catch.html#v:try">try</a></code> that takes an exception predicate to select + which exceptions are caught. See <a href="file:///usr/local/share/doc/ghc/html/libraries/base-4.7.0.1/Control-Exception.html">Control.Exception</a>'s <code><a href="file:///usr/local/share/doc/ghc/html/libraries/base-4.7.0.1/Control-Exception-Base.html#v:tryJust">tryJust</a></code></p></div></div><div class="top"><p class="src"><a name="v:onException" class="def">onException</a> :: <a href="Control-Monad-Catch.html#t:MonadCatch">MonadCatch</a> m => m a -> m b -> m a <a href="src/Control-Monad-Catch.html#onException" class="link">Source</a></p><div class="doc"><p>Run an action only if an exception is thrown in the main action. The + exception is not caught, simply rethrown.</p></div></div><div class="top"><p class="src"><a name="v:bracket" class="def">bracket</a> :: <a href="Control-Monad-Catch.html#t:MonadMask">MonadMask</a> m => m a -> (a -> m b) -> (a -> m c) -> m c <a href="src/Control-Monad-Catch.html#bracket" class="link">Source</a></p><div class="doc"><p>Generalized abstracted pattern of safe resource acquisition and release in the face of exceptions. The first action "acquires" some value, which is "released" by the second action at the end. The third action "uses" - the value and its result is the result of the <code><a href="Control-Monad-Catch.html#v:bracket">bracket</a></code>. -</p><p>If an exception occurs during the use, the release still happens before the - exception is rethrown. -</p></div></div><div class="top"><p class="src"><a name="v:bracket_" class="def">bracket_</a> :: <a href="Control-Monad-Catch.html#t:MonadCatch">MonadCatch</a> m => m a -> m b -> m c -> m c<a href="src/Control-Monad-Catch.html#bracket_" class="link">Source</a></p><div class="doc"><p>Version of <code><a href="Control-Monad-Catch.html#v:bracket">bracket</a></code> without any value being passed to the second and - third actions. -</p></div></div><div class="top"><p class="src"><a name="v:finally" class="def">finally</a> :: <a href="Control-Monad-Catch.html#t:MonadCatch">MonadCatch</a> m => m a -> m b -> m a<a href="src/Control-Monad-Catch.html#finally" class="link">Source</a></p><div class="doc"><p>Perform an action with a finalizer action that is run, even if an - exception occurs. -</p></div></div><div class="top"><p class="src"><a name="v:bracketOnError" class="def">bracketOnError</a> :: <a href="Control-Monad-Catch.html#t:MonadCatch">MonadCatch</a> m => m a -> (a -> m b) -> (a -> m c) -> m c<a href="src/Control-Monad-Catch.html#bracketOnError" class="link">Source</a></p><div class="doc"><p>Like <code><a href="Control-Monad-Catch.html#v:bracket">bracket</a></code>, but only performs the final action if there was an - exception raised by the in-between computation. -</p></div></div><h1 id="g:4">Re-exports from Control.Exception -</h1><div class="top"><p class="src"><span class="keyword">class</span> (<a href="/Library/Frameworks/GHC.framework/Versions/7.4.1-x86_64/usr/share/doc/ghc/html/libraries/base-4.5.0.0/Data-Typeable-Internal.html#t:Typeable">Typeable</a> e, <a href="/Library/Frameworks/GHC.framework/Versions/7.4.1-x86_64/usr/share/doc/ghc/html/libraries/base-4.5.0.0/Text-Show.html#t:Show">Show</a> e) => <a name="t:Exception" class="def">Exception</a> e <span class="keyword">where</span></p><div class="doc"><p>Any type that you wish to throw or catch as an exception must be an + the value and its result is the result of the <code><a href="Control-Monad-Catch.html#v:bracket">bracket</a></code>.</p><p>If an exception occurs during the use, the release still happens before the + exception is rethrown.</p></div></div><div class="top"><p class="src"><a name="v:bracket_" class="def">bracket_</a> :: <a href="Control-Monad-Catch.html#t:MonadMask">MonadMask</a> m => m a -> m b -> m c -> m c <a href="src/Control-Monad-Catch.html#bracket_" class="link">Source</a></p><div class="doc"><p>Version of <code><a href="Control-Monad-Catch.html#v:bracket">bracket</a></code> without any value being passed to the second and + third actions.</p></div></div><div class="top"><p class="src"><a name="v:finally" class="def">finally</a> :: <a href="Control-Monad-Catch.html#t:MonadMask">MonadMask</a> m => m a -> m b -> m a <a href="src/Control-Monad-Catch.html#finally" class="link">Source</a></p><div class="doc"><p>Perform an action with a finalizer action that is run, even if an + exception occurs.</p></div></div><div class="top"><p class="src"><a name="v:bracketOnError" class="def">bracketOnError</a> :: <a href="Control-Monad-Catch.html#t:MonadMask">MonadMask</a> m => m a -> (a -> m b) -> (a -> m c) -> m c <a href="src/Control-Monad-Catch.html#bracketOnError" class="link">Source</a></p><div class="doc"><p>Like <code><a href="Control-Monad-Catch.html#v:bracket">bracket</a></code>, but only performs the final action if there was an + exception raised by the in-between computation.</p></div></div><h1 id="g:3">Re-exports from Control.Exception</h1><div class="top"><p class="src"><span class="keyword">class</span> (<a href="file:///usr/local/share/doc/ghc/html/libraries/base-4.7.0.1/Data-Typeable-Internal.html#t:Typeable">Typeable</a> * e, <a href="file:///usr/local/share/doc/ghc/html/libraries/base-4.7.0.1/Text-Show.html#t:Show">Show</a> e) => <a name="t:Exception" class="def">Exception</a> e <span class="keyword">where</span></p><div class="doc"><p>Any type that you wish to throw or catch as an exception must be an instance of the <code>Exception</code> class. The simplest case is a new exception -type directly below the root: -</p><pre> data MyException = ThisException | ThatException - deriving (Show, Typeable) +type directly below the root:</p><pre>data MyException = ThisException | ThatException + deriving (Show, Typeable) - instance Exception MyException -</pre><p>The default method definitions in the <code>Exception</code> class do what we need +instance Exception MyException</pre><p>The default method definitions in the <code>Exception</code> class do what we need in this case. You can now throw and catch <code>ThisException</code> and -<code>ThatException</code> as exceptions: -</p><pre> -*Main> throw ThisException `catch` \e -> putStrLn ("Caught " ++ show (e :: MyException)) +<code>ThatException</code> as exceptions:</p><pre>*Main> throw ThisException `catch` \e -> putStrLn ("Caught " ++ show (e :: MyException)) Caught ThisException </pre><p>In more complicated examples, you may wish to define a whole hierarchy -of exceptions: -</p><pre> --------------------------------------------------------------------- - -- Make the root exception type for all the exceptions in a compiler +of exceptions:</p><pre>--------------------------------------------------------------------- +-- Make the root exception type for all the exceptions in a compiler - data SomeCompilerException = forall e . Exception e => SomeCompilerException e - deriving Typeable +data SomeCompilerException = forall e . Exception e => SomeCompilerException e + deriving Typeable - instance Show SomeCompilerException where - show (SomeCompilerException e) = show e +instance Show SomeCompilerException where + show (SomeCompilerException e) = show e - instance Exception SomeCompilerException +instance Exception SomeCompilerException - compilerExceptionToException :: Exception e => e -> SomeException - compilerExceptionToException = toException . SomeCompilerException +compilerExceptionToException :: Exception e => e -> SomeException +compilerExceptionToException = toException . SomeCompilerException - compilerExceptionFromException :: Exception e => SomeException -> Maybe e - compilerExceptionFromException x = do - SomeCompilerException a <- fromException x - cast a +compilerExceptionFromException :: Exception e => SomeException -> Maybe e +compilerExceptionFromException x = do + SomeCompilerException a <- fromException x + cast a - --------------------------------------------------------------------- - -- Make a subhierarchy for exceptions in the frontend of the compiler +--------------------------------------------------------------------- +-- Make a subhierarchy for exceptions in the frontend of the compiler - data SomeFrontendException = forall e . Exception e => SomeFrontendException e - deriving Typeable +data SomeFrontendException = forall e . Exception e => SomeFrontendException e + deriving Typeable - instance Show SomeFrontendException where - show (SomeFrontendException e) = show e +instance Show SomeFrontendException where + show (SomeFrontendException e) = show e - instance Exception SomeFrontendException where - toException = compilerExceptionToException - fromException = compilerExceptionFromException +instance Exception SomeFrontendException where + toException = compilerExceptionToException + fromException = compilerExceptionFromException - frontendExceptionToException :: Exception e => e -> SomeException - frontendExceptionToException = toException . SomeFrontendException +frontendExceptionToException :: Exception e => e -> SomeException +frontendExceptionToException = toException . SomeFrontendException - frontendExceptionFromException :: Exception e => SomeException -> Maybe e - frontendExceptionFromException x = do - SomeFrontendException a <- fromException x - cast a +frontendExceptionFromException :: Exception e => SomeException -> Maybe e +frontendExceptionFromException x = do + SomeFrontendException a <- fromException x + cast a - --------------------------------------------------------------------- - -- Make an exception type for a particular frontend compiler exception +--------------------------------------------------------------------- +-- Make an exception type for a particular frontend compiler exception - data MismatchedParentheses = MismatchedParentheses - deriving (Typeable, Show) +data MismatchedParentheses = MismatchedParentheses + deriving (Typeable, Show) - instance Exception MismatchedParentheses where - toException = frontendExceptionToException - fromException = frontendExceptionFromException -</pre><p>We can now catch a <code>MismatchedParentheses</code> exception as +instance Exception MismatchedParentheses where + toException = frontendExceptionToException + fromException = frontendExceptionFromException</pre><p>We can now catch a <code>MismatchedParentheses</code> exception as <code>MismatchedParentheses</code>, <code>SomeFrontendException</code> or -<code>SomeCompilerException</code>, but not other types, e.g. <code>IOException</code>: -</p><pre> -*Main> throw MismatchedParentheses <code>catch</code> e -> putStrLn ("Caught " ++ show (e :: MismatchedParentheses)) +<code>SomeCompilerException</code>, but not other types, e.g. <code>IOException</code>:</p><pre>*Main> throw MismatchedParentheses <code>catch</code> e -> putStrLn ("Caught " ++ show (e :: MismatchedParentheses)) Caught MismatchedParentheses *Main> throw MismatchedParentheses <code>catch</code> e -> putStrLn ("Caught " ++ show (e :: SomeFrontendException)) Caught MismatchedParentheses @@ -144,7 +122,6 @@ Caught MismatchedParentheses Caught MismatchedParentheses *Main> throw MismatchedParentheses <code>catch</code> e -> putStrLn ("Caught " ++ show (e :: IOException)) *** Exception: MismatchedParentheses -</pre></div><div class="subs methods"><p class="caption">Methods</p><p class="src"><a name="v:toException" class="def">toException</a> :: e -> <a href="Control-Monad-Catch.html#t:SomeException">SomeException</a></p><p class="src"><a name="v:fromException" class="def">fromException</a> :: <a href="Control-Monad-Catch.html#t:SomeException">SomeException</a> -> <a href="/Library/Frameworks/GHC.framework/Versions/7.4.1-x86_64/usr/share/doc/ghc/html/libraries/base-4.5.0.0/Data-Maybe.html#t:Maybe">Maybe</a> e</p></div><div class="subs instances"><p id="control.i:Exception" class="caption collapser" onclick="toggleSection('i:Exception')">Instances</p><div id="section.i:Exception" class="show"><table><tr><td class="src"><a href="Control-Monad-Catch.html#t:Exception">Exception</a> <a href="/Library/Frameworks/GHC.framework/Versions/7.4.1-x86_64/usr/share/doc/ghc/html/libraries/base-4.5.0.0/Control-Exception-Base.html#t:PatternMatchFail">PatternMatchFail</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Control-Monad-Catch.html#t:Exception">Exception</a> <a href="/Library/Frameworks/GHC.framework/Versions/7.4.1-x86_64/usr/share/doc/ghc/html/libraries/base-4.5.0.0/Control-Exception-Base.html#t:RecSelError">RecSelError</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Control-Monad-Catch.html#t:Exception">Exception</a> <a href="/Library/Frameworks/GHC.framework/Versions/7.4.1-x86_64/usr/share/doc/ghc/html/libraries/base-4.5.0.0/Control-Exception-Base.html#t:RecConError">RecConError</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Control-Monad-Catch.html#t:Exception">Exception</a> <a href="/Library/Frameworks/GHC.framework/Versions/7.4.1-x86_64/usr/share/doc/ghc/html/libraries/base-4.5.0.0/Control-Exception-Base.html#t:RecUpdError">RecUpdError</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Control-Monad-Catch.html#t:Exception">Exception</a> <a href="/Library/Frameworks/GHC.framework/Versions/7.4.1-x86_64/usr/share/doc/ghc/html/libraries/base-4.5.0.0/Control-Exception-Base.html#t:NoMethodError">NoMethodError</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Control-Monad-Catch.html#t:Exception">Exception</a> <a href="/Library/Frameworks/GHC.framework/Versions/7.4.1-x86_64/usr/share/doc/ghc/html/libraries/base-4.5.0.0/Control-Exception-Base.html#t:NonTermination">NonTermination</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Control-Monad-Catch.html#t:Exception">Exception</a> <a href="/Library/Frameworks/GHC.framework/Versions/7.4.1-x86_64/usr/share/doc/ghc/html/libraries/base-4.5.0.0/Control-Exception-Base.html#t:NestedAtomically">NestedAtomically</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Control-Monad-Catch.html#t:Exception">Exception</a> <a href="/Library/Frameworks/GHC.framework/Versions/7.4.1-x86_64/usr/share/doc/ghc/html/libraries/base-4.5.0.0/Control-Exception-Base.html#t:BlockedIndefinitelyOnMVar">BlockedIndefinitelyOnMVar</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Control-Monad-Catch.html#t:Exception">Exception</a> <a href="/Library/Frameworks/GHC.framework/Versions/7.4.1-x86_64/usr/share/doc/ghc/html/libraries/base-4.5.0.0/Control-Exception-Base.html#t:BlockedIndefinitelyOnSTM">BlockedIndefinitelyOnSTM</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Control-Monad-Catch.html#t:Exception">Exception</a> <a href="/Library/Frameworks/GHC.framework/Versions/7.4.1-x86_64/usr/share/doc/ghc/html/libraries/base-4.5.0.0/Control-Exception-Base.html#t:Deadlock">Deadlock</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Control-Monad-Catch.html#t:Exception">Exception</a> <a href="/Library/Frameworks/GHC.framework/Versions/7.4.1-x86_64/usr/share/doc/ghc/html/libraries/base-4.5.0.0/Control-Exception-Base.html#t:AssertionFailed">AssertionFailed</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Control-Monad-Catch.html#t:Exception">Exception</a> <a href="/Library/Frameworks/GHC.framework/Versions/7.4.1-x86_64/usr/share/doc/ghc/html/libraries/base-4.5.0.0/Control-Exception-Base.html#t:AsyncException">AsyncException</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Control-Monad-Catch.html#t:Exception">Exception</a> <a href="/Library/Frameworks/GHC.framework/Versions/7.4.1-x86_64/usr/share/doc/ghc/html/libraries/base-4.5.0.0/Control-Exception-Base.html#t:ArrayException">ArrayException</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Control-Monad-Catch.html#t:Exception">Exception</a> <a href="/Library/Frameworks/GHC.framework/Versions/7.4.1-x86_64/usr/share/doc/ghc/html/libraries/base-4.5.0.0/System-Exit.html#t:ExitCode">ExitCode</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Control-Monad-Catch.html#t:Exception">Exception</a> <a href="/Library/Frameworks/GHC.framework/Versions/7.4.1-x86_64/usr/share/doc/ghc/html/libraries/base-4.5.0.0/Control-Exception-Base.html#t:IOException">IOException</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Control-Monad-Catch.html#t:Exception">Exception</a> <a href="Control-Monad-Catch.html#t:SomeException">SomeException</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Control-Monad-Catch.html#t:Exception">Exception</a> <a href="/Library/Frameworks/GHC.framework/Versions/7.4.1-x86_64/usr/share/doc/ghc/html/libraries/base-4.5.0.0/Control-Exception-Base.html#t:ErrorCall">ErrorCall</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Control-Monad-Catch.html#t:Exception">Exception</a> <a href="/Library/Frameworks/GHC.framework/Versions/7.4.1-x86_64/usr/share/doc/ghc/html/libraries/base-4.5.0.0/Control-Exception-Base.html#t:ArithException">ArithException</a></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:SomeException" class="def">SomeException</a> <span class="keyword">where</span></p><div class="doc"><p>The <code>SomeException</code> type is the root of the exception type hierarchy. +</pre></div><div class="subs minimal"><p class="caption">Minimal complete definition</p><p class="src">Nothing</p></div><div class="subs methods"><p class="caption">Methods</p><p class="src"><a name="v:toException" class="def">toException</a> :: e -> <a href="Control-Monad-Catch.html#t:SomeException">SomeException</a></p><p class="src"><a name="v:fromException" class="def">fromException</a> :: <a href="Control-Monad-Catch.html#t:SomeException">SomeException</a> -> <a href="file:///usr/local/share/doc/ghc/html/libraries/base-4.7.0.1/Data-Maybe.html#t:Maybe">Maybe</a> e</p></div><div class="subs instances"><p id="control.i:Exception" class="caption collapser" onclick="toggleSection('i:Exception')">Instances</p><div id="section.i:Exception" class="show"><table><tr><td class="src"><a href="Control-Monad-Catch.html#t:Exception">Exception</a> <a href="file:///usr/local/share/doc/ghc/html/libraries/base-4.7.0.1/Control-Exception-Base.html#t:PatternMatchFail">PatternMatchFail</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Control-Monad-Catch.html#t:Exception">Exception</a> <a href="file:///usr/local/share/doc/ghc/html/libraries/base-4.7.0.1/Control-Exception-Base.html#t:RecSelError">RecSelError</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Control-Monad-Catch.html#t:Exception">Exception</a> <a href="file:///usr/local/share/doc/ghc/html/libraries/base-4.7.0.1/Control-Exception-Base.html#t:RecConError">RecConError</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Control-Monad-Catch.html#t:Exception">Exception</a> <a href="file:///usr/local/share/doc/ghc/html/libraries/base-4.7.0.1/Control-Exception-Base.html#t:RecUpdError">RecUpdError</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Control-Monad-Catch.html#t:Exception">Exception</a> <a href="file:///usr/local/share/doc/ghc/html/libraries/base-4.7.0.1/Control-Exception-Base.html#t:NoMethodError">NoMethodError</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Control-Monad-Catch.html#t:Exception">Exception</a> <a href="file:///usr/local/share/doc/ghc/html/libraries/base-4.7.0.1/Control-Exception-Base.html#t:NonTermination">NonTermination</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Control-Monad-Catch.html#t:Exception">Exception</a> <a href="file:///usr/local/share/doc/ghc/html/libraries/base-4.7.0.1/Control-Exception-Base.html#t:NestedAtomically">NestedAtomically</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Control-Monad-Catch.html#t:Exception">Exception</a> <a href="file:///usr/local/share/doc/ghc/html/libraries/base-4.7.0.1/Control-Exception-Base.html#t:BlockedIndefinitelyOnMVar">BlockedIndefinitelyOnMVar</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Control-Monad-Catch.html#t:Exception">Exception</a> <a href="file:///usr/local/share/doc/ghc/html/libraries/base-4.7.0.1/Control-Exception-Base.html#t:BlockedIndefinitelyOnSTM">BlockedIndefinitelyOnSTM</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Control-Monad-Catch.html#t:Exception">Exception</a> <a href="file:///usr/local/share/doc/ghc/html/libraries/base-4.7.0.1/Control-Exception-Base.html#t:Deadlock">Deadlock</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Control-Monad-Catch.html#t:Exception">Exception</a> <a href="file:///usr/local/share/doc/ghc/html/libraries/base-4.7.0.1/Control-Exception-Base.html#t:AssertionFailed">AssertionFailed</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Control-Monad-Catch.html#t:Exception">Exception</a> <a href="file:///usr/local/share/doc/ghc/html/libraries/base-4.7.0.1/Control-Exception-Base.html#t:SomeAsyncException">SomeAsyncException</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Control-Monad-Catch.html#t:Exception">Exception</a> <a href="file:///usr/local/share/doc/ghc/html/libraries/base-4.7.0.1/Control-Exception-Base.html#t:AsyncException">AsyncException</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Control-Monad-Catch.html#t:Exception">Exception</a> <a href="file:///usr/local/share/doc/ghc/html/libraries/base-4.7.0.1/Control-Exception-Base.html#t:ArrayException">ArrayException</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Control-Monad-Catch.html#t:Exception">Exception</a> <a href="file:///usr/local/share/doc/ghc/html/libraries/base-4.7.0.1/System-Exit.html#t:ExitCode">ExitCode</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Control-Monad-Catch.html#t:Exception">Exception</a> <a href="file:///usr/local/share/doc/ghc/html/libraries/base-4.7.0.1/Control-Exception-Base.html#t:IOException">IOException</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Control-Monad-Catch.html#t:Exception">Exception</a> <a href="file:///usr/local/share/doc/ghc/html/libraries/base-4.7.0.1/Control-Exception-Base.html#t:ErrorCall">ErrorCall</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Control-Monad-Catch.html#t:Exception">Exception</a> <a href="file:///usr/local/share/doc/ghc/html/libraries/base-4.7.0.1/Control-Exception-Base.html#t:ArithException">ArithException</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Control-Monad-Catch.html#t:Exception">Exception</a> <a href="Control-Monad-Catch.html#t:SomeException">SomeException</a></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:SomeException" class="def">SomeException</a> :: * <span class="keyword">where</span></p><div class="doc"><p>The <code>SomeException</code> type is the root of the exception type hierarchy. When an exception of type <code>e</code> is thrown, behind the scenes it is -encapsulated in a <code>SomeException</code>. -</p></div><div class="subs constructors"><p class="caption">Constructors</p><table><tr><td class="src"><a name="v:SomeException" class="def">SomeException</a> :: <a href="Control-Monad-Catch.html#t:Exception">Exception</a> e => e -> <a href="Control-Monad-Catch.html#t:SomeException">SomeException</a></td><td class="doc empty"> </td></tr></table></div><div class="subs instances"><p id="control.i:SomeException" class="caption collapser" onclick="toggleSection('i:SomeException')">Instances</p><div id="section.i:SomeException" class="show"><table><tr><td class="src"><a href="/Library/Frameworks/GHC.framework/Versions/7.4.1-x86_64/usr/share/doc/ghc/html/libraries/base-4.5.0.0/Text-Show.html#t:Show">Show</a> <a href="Control-Monad-Catch.html#t:SomeException">SomeException</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a href="/Library/Frameworks/GHC.framework/Versions/7.4.1-x86_64/usr/share/doc/ghc/html/libraries/base-4.5.0.0/Data-Typeable-Internal.html#t:Typeable">Typeable</a> <a href="Control-Monad-Catch.html#t:SomeException">SomeException</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Control-Monad-Catch.html#t:Exception">Exception</a> <a href="Control-Monad-Catch.html#t:SomeException">SomeException</a></td><td class="doc empty"> </td></tr></table></div></div></div></div></div><div id="footer"><p>Produced by <a href="http://www.haskell.org/haddock/">Haddock</a> version 2.10.0</p></div></body></html> \ No newline at end of file +encapsulated in a <code>SomeException</code>.</p></div><div class="subs constructors"><p class="caption">Constructors</p><table><tr><td class="src"><a name="v:SomeException" class="def">SomeException</a> :: <a href="Control-Monad-Catch.html#t:Exception">Exception</a> e => e -> <a href="Control-Monad-Catch.html#t:SomeException">SomeException</a></td><td class="doc empty"> </td></tr></table></div><div class="subs instances"><p id="control.i:SomeException" class="caption collapser" onclick="toggleSection('i:SomeException')">Instances</p><div id="section.i:SomeException" class="show"><table><tr><td class="src"><a href="file:///usr/local/share/doc/ghc/html/libraries/base-4.7.0.1/Text-Show.html#t:Show">Show</a> <a href="Control-Monad-Catch.html#t:SomeException">SomeException</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Control-Monad-Catch.html#t:Exception">Exception</a> <a href="Control-Monad-Catch.html#t:SomeException">SomeException</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a href="file:///usr/local/share/doc/ghc/html/libraries/base-4.7.0.1/Data-Typeable-Internal.html#t:Typeable">Typeable</a> * <a href="Control-Monad-Catch.html#t:SomeException">SomeException</a></td><td class="doc empty"> </td></tr></table></div></div></div></div></div><div id="footer"><p>Produced by <a href="http://www.haskell.org/haddock/">Haddock</a> version 2.15.1</p></div></body></html> \ No newline at end of file diff --git a/doc-index.html b/doc-index.html index 07ffde9b746eac2426021f413a3aef8cabfd434b..0d2e3b087974ad0b89414052f8fb0321c13edc25 100644 --- a/doc-index.html +++ b/doc-index.html @@ -1,4 +1,4 @@ -<!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>exceptions-0.1: Extensible optionally-pure exceptions (Index)</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[ +<!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>exceptions-0.8.0.1: Extensible optionally-pure exceptions (Index)</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();}; //]]> -</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">exceptions-0.1: Extensible optionally-pure exceptions</p></div><div id="content"><div id="index"><p class="caption">Index</p><table><tr><td class="src">bracket</td><td class="module"><a href="Control-Monad-Catch.html#v:bracket">Control.Monad.Catch</a></td></tr><tr><td class="src">bracketOnError</td><td class="module"><a href="Control-Monad-Catch.html#v:bracketOnError">Control.Monad.Catch</a></td></tr><tr><td class="src">bracket_</td><td class="module"><a href="Control-Monad-Catch.html#v:bracket_">Control.Monad.Catch</a></td></tr><tr><td class="src">Catch</td><td class="module"><a href="Control-Monad-Catch.html#t:Catch">Control.Monad.Catch</a></td></tr><tr><td class="src">catch</td><td class="module"><a href="Control-Monad-Catch.html#v:catch">Control.Monad.Catch</a></td></tr><tr><td class="src">catchAll</td><td class="module"><a href="Control-Monad-Catch.html#v:catchAll">Control.Monad.Catch</a></td></tr><tr><td class="src">catches</td><td class="module"><a href="Control-Monad-Catch.html#v:catches">Control.Monad.Catch</a></td></tr><tr><td class="src">catchIf</td><td class="module"><a href="Control-Monad-Catch.html#v:catchIf">Control.Monad.Catch</a></td></tr><tr><td class="src">catchIOError</td><td class="module"><a href="Control-Monad-Catch.html#v:catchIOError">Control.Monad.Catch</a></td></tr><tr><td class="src">catchJust</td><td class="module"><a href="Control-Monad-Catch.html#v:catchJust">Control.Monad.Catch</a></td></tr><tr><td class="src">CatchT</td><td> </td></tr><tr><td class="alt">1 (Type/Class)</td><td class="module"><a href="Control-Monad-Catch.html#t:CatchT">Control.Monad.Catch</a></td></tr><tr><td class="alt">2 (Data Constructor)</td><td class="module"><a href="Control-Monad-Catch.html#v:CatchT">Control.Monad.Catch</a></td></tr><tr><td class="src">Exception</td><td class="module"><a href="Control-Monad-Catch.html#t:Exception">Control.Monad.Catch</a></td></tr><tr><td class="src">finally</td><td class="module"><a href="Control-Monad-Catch.html#v:finally">Control.Monad.Catch</a></td></tr><tr><td class="src">fromException</td><td class="module"><a href="Control-Monad-Catch.html#v:fromException">Control.Monad.Catch</a></td></tr><tr><td class="src">handle</td><td class="module"><a href="Control-Monad-Catch.html#v:handle">Control.Monad.Catch</a></td></tr><tr><td class="src">handleJust</td><td class="module"><a href="Control-Monad-Catch.html#v:handleJust">Control.Monad.Catch</a></td></tr><tr><td class="src">Handler</td><td> </td></tr><tr><td class="alt">1 (Type/Class)</td><td class="module"><a href="Control-Monad-Catch.html#t:Handler">Control.Monad.Catch</a></td></tr><tr><td class="alt">2 (Data Constructor)</td><td class="module"><a href="Control-Monad-Catch.html#v:Handler">Control.Monad.Catch</a></td></tr><tr><td class="src">mapCatchT</td><td class="module"><a href="Control-Monad-Catch.html#v:mapCatchT">Control.Monad.Catch</a></td></tr><tr><td class="src">mask</td><td class="module"><a href="Control-Monad-Catch.html#v:mask">Control.Monad.Catch</a></td></tr><tr><td class="src">MonadCatch</td><td class="module"><a href="Control-Monad-Catch.html#t:MonadCatch">Control.Monad.Catch</a></td></tr><tr><td class="src">onException</td><td class="module"><a href="Control-Monad-Catch.html#v:onException">Control.Monad.Catch</a></td></tr><tr><td class="src">runCatch</td><td class="module"><a href="Control-Monad-Catch.html#v:runCatch">Control.Monad.Catch</a></td></tr><tr><td class="src">runCatchT</td><td class="module"><a href="Control-Monad-Catch.html#v:runCatchT">Control.Monad.Catch</a></td></tr><tr><td class="src">SomeException</td><td> </td></tr><tr><td class="alt">1 (Data Constructor)</td><td class="module"><a href="Control-Monad-Catch.html#v:SomeException">Control.Monad.Catch</a></td></tr><tr><td class="alt">2 (Type/Class)</td><td class="module"><a href="Control-Monad-Catch.html#t:SomeException">Control.Monad.Catch</a></td></tr><tr><td class="src">throwM</td><td class="module"><a href="Control-Monad-Catch.html#v:throwM">Control.Monad.Catch</a></td></tr><tr><td class="src">toException</td><td class="module"><a href="Control-Monad-Catch.html#v:toException">Control.Monad.Catch</a></td></tr><tr><td class="src">try</td><td class="module"><a href="Control-Monad-Catch.html#v:try">Control.Monad.Catch</a></td></tr><tr><td class="src">tryJust</td><td class="module"><a href="Control-Monad-Catch.html#v:tryJust">Control.Monad.Catch</a></td></tr></table></div></div><div id="footer"><p>Produced by <a href="http://www.haskell.org/haddock/">Haddock</a> version 2.10.0</p></div></body></html> \ No newline at end of file +</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">exceptions-0.8.0.1: Extensible optionally-pure exceptions</p></div><div id="content"><div id="index"><p class="caption">Index</p><table><tr><td class="src">bracket</td><td class="module"><a href="Control-Monad-Catch.html#v:bracket">Control.Monad.Catch</a>, Control.Monad.Catch.Pure</td></tr><tr><td class="src">bracketOnError</td><td class="module"><a href="Control-Monad-Catch.html#v:bracketOnError">Control.Monad.Catch</a>, Control.Monad.Catch.Pure</td></tr><tr><td class="src">bracket_</td><td class="module"><a href="Control-Monad-Catch.html#v:bracket_">Control.Monad.Catch</a>, Control.Monad.Catch.Pure</td></tr><tr><td class="src">Catch</td><td class="module"><a href="Control-Monad-Catch-Pure.html#t:Catch">Control.Monad.Catch.Pure</a></td></tr><tr><td class="src">catch</td><td class="module"><a href="Control-Monad-Catch.html#v:catch">Control.Monad.Catch</a>, Control.Monad.Catch.Pure</td></tr><tr><td class="src">catchAll</td><td class="module"><a href="Control-Monad-Catch.html#v:catchAll">Control.Monad.Catch</a>, Control.Monad.Catch.Pure</td></tr><tr><td class="src">catches</td><td class="module"><a href="Control-Monad-Catch.html#v:catches">Control.Monad.Catch</a>, Control.Monad.Catch.Pure</td></tr><tr><td class="src">catchIf</td><td class="module"><a href="Control-Monad-Catch.html#v:catchIf">Control.Monad.Catch</a>, Control.Monad.Catch.Pure</td></tr><tr><td class="src">catchIOError</td><td class="module"><a href="Control-Monad-Catch.html#v:catchIOError">Control.Monad.Catch</a>, Control.Monad.Catch.Pure</td></tr><tr><td class="src">catchJust</td><td class="module"><a href="Control-Monad-Catch.html#v:catchJust">Control.Monad.Catch</a>, Control.Monad.Catch.Pure</td></tr><tr><td class="src">CatchT</td><td> </td></tr><tr><td class="alt">1 (Type/Class)</td><td class="module"><a href="Control-Monad-Catch-Pure.html#t:CatchT">Control.Monad.Catch.Pure</a></td></tr><tr><td class="alt">2 (Data Constructor)</td><td class="module"><a href="Control-Monad-Catch-Pure.html#v:CatchT">Control.Monad.Catch.Pure</a></td></tr><tr><td class="src">Exception</td><td class="module"><a href="Control-Monad-Catch.html#t:Exception">Control.Monad.Catch</a>, Control.Monad.Catch.Pure</td></tr><tr><td class="src">finally</td><td class="module"><a href="Control-Monad-Catch.html#v:finally">Control.Monad.Catch</a>, Control.Monad.Catch.Pure</td></tr><tr><td class="src">fromException</td><td class="module"><a href="Control-Monad-Catch.html#v:fromException">Control.Monad.Catch</a>, Control.Monad.Catch.Pure</td></tr><tr><td class="src">handle</td><td class="module"><a href="Control-Monad-Catch.html#v:handle">Control.Monad.Catch</a>, Control.Monad.Catch.Pure</td></tr><tr><td class="src">handleAll</td><td class="module"><a href="Control-Monad-Catch.html#v:handleAll">Control.Monad.Catch</a>, Control.Monad.Catch.Pure</td></tr><tr><td class="src">handleIf</td><td class="module"><a href="Control-Monad-Catch.html#v:handleIf">Control.Monad.Catch</a>, Control.Monad.Catch.Pure</td></tr><tr><td class="src">handleIOError</td><td class="module"><a href="Control-Monad-Catch.html#v:handleIOError">Control.Monad.Catch</a>, Control.Monad.Catch.Pure</td></tr><tr><td class="src">handleJust</td><td class="module"><a href="Control-Monad-Catch.html#v:handleJust">Control.Monad.Catch</a>, Control.Monad.Catch.Pure</td></tr><tr><td class="src">Handler</td><td> </td></tr><tr><td class="alt">1 (Type/Class)</td><td class="module"><a href="Control-Monad-Catch.html#t:Handler">Control.Monad.Catch</a>, Control.Monad.Catch.Pure</td></tr><tr><td class="alt">2 (Data Constructor)</td><td class="module"><a href="Control-Monad-Catch.html#v:Handler">Control.Monad.Catch</a>, Control.Monad.Catch.Pure</td></tr><tr><td class="src">mapCatchT</td><td class="module"><a href="Control-Monad-Catch-Pure.html#v:mapCatchT">Control.Monad.Catch.Pure</a></td></tr><tr><td class="src">mask</td><td class="module"><a href="Control-Monad-Catch.html#v:mask">Control.Monad.Catch</a>, Control.Monad.Catch.Pure</td></tr><tr><td class="src">mask_</td><td class="module"><a href="Control-Monad-Catch.html#v:mask_">Control.Monad.Catch</a>, Control.Monad.Catch.Pure</td></tr><tr><td class="src">MonadCatch</td><td class="module"><a href="Control-Monad-Catch.html#t:MonadCatch">Control.Monad.Catch</a>, Control.Monad.Catch.Pure</td></tr><tr><td class="src">MonadMask</td><td class="module"><a href="Control-Monad-Catch.html#t:MonadMask">Control.Monad.Catch</a>, Control.Monad.Catch.Pure</td></tr><tr><td class="src">MonadThrow</td><td class="module"><a href="Control-Monad-Catch.html#t:MonadThrow">Control.Monad.Catch</a>, Control.Monad.Catch.Pure</td></tr><tr><td class="src">onException</td><td class="module"><a href="Control-Monad-Catch.html#v:onException">Control.Monad.Catch</a>, Control.Monad.Catch.Pure</td></tr><tr><td class="src">runCatch</td><td class="module"><a href="Control-Monad-Catch-Pure.html#v:runCatch">Control.Monad.Catch.Pure</a></td></tr><tr><td class="src">runCatchT</td><td class="module"><a href="Control-Monad-Catch-Pure.html#v:runCatchT">Control.Monad.Catch.Pure</a></td></tr><tr><td class="src">SomeException</td><td> </td></tr><tr><td class="alt">1 (Data Constructor)</td><td class="module"><a href="Control-Monad-Catch.html#v:SomeException">Control.Monad.Catch</a>, Control.Monad.Catch.Pure</td></tr><tr><td class="alt">2 (Type/Class)</td><td class="module"><a href="Control-Monad-Catch.html#t:SomeException">Control.Monad.Catch</a>, Control.Monad.Catch.Pure</td></tr><tr><td class="src">throwM</td><td class="module"><a href="Control-Monad-Catch.html#v:throwM">Control.Monad.Catch</a>, Control.Monad.Catch.Pure</td></tr><tr><td class="src">toException</td><td class="module"><a href="Control-Monad-Catch.html#v:toException">Control.Monad.Catch</a>, Control.Monad.Catch.Pure</td></tr><tr><td class="src">try</td><td class="module"><a href="Control-Monad-Catch.html#v:try">Control.Monad.Catch</a>, Control.Monad.Catch.Pure</td></tr><tr><td class="src">tryJust</td><td class="module"><a href="Control-Monad-Catch.html#v:tryJust">Control.Monad.Catch</a>, Control.Monad.Catch.Pure</td></tr><tr><td class="src">uninterruptibleMask</td><td class="module"><a href="Control-Monad-Catch.html#v:uninterruptibleMask">Control.Monad.Catch</a>, Control.Monad.Catch.Pure</td></tr><tr><td class="src">uninterruptibleMask_</td><td class="module"><a href="Control-Monad-Catch.html#v:uninterruptibleMask_">Control.Monad.Catch</a>, Control.Monad.Catch.Pure</td></tr></table></div></div><div id="footer"><p>Produced by <a href="http://www.haskell.org/haddock/">Haddock</a> version 2.15.1</p></div></body></html> \ No newline at end of file diff --git a/exceptions.haddock b/exceptions.haddock index 294674489a27bc8a9338953ccb0f3618e3eda53b..e11f3c18b0858ace69f9e471502cc92172895774 100644 Binary files a/exceptions.haddock and b/exceptions.haddock differ diff --git a/frames.html b/frames.html index 30ce1fa51379971b1efc11ec0ac1dca309e6a287..1b4e38d4a513de8e2fc27d9619999a1732330561 100644 --- a/frames.html +++ b/frames.html @@ -3,6 +3,7 @@ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> +<title></title> <script src="haddock-util.js" type="text/javascript"></script> <script type="text/javascript"><!-- /* @@ -18,11 +19,12 @@ function load() { postReframe(); } --></script> +</head> <frameset id="outer-fs" cols="25%,75%" onload="load()"> <frameset id="inner-fs" rows="100%,0%"> - <frame src="index-frames.html" name="modules"> - <frame src="" name="synopsis"> + <frame src="index-frames.html" name="modules" /> + <frame src="" name="synopsis" /> </frameset> - <frame src="index.html" name="main"> + <frame src="index.html" name="main" /> </frameset> </html> diff --git a/index-frames.html b/index-frames.html index 748c92bfc31f2bc2040c7f7ced791f5d330a0d4d..355644acf40348ab3c3c95e0f4141461b1f5792b 100644 --- a/index-frames.html +++ b/index-frames.html @@ -1,4 +1,4 @@ -<!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>exceptions-0.1: Extensible optionally-pure exceptions</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[ +<!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>exceptions-0.8.0.1: Extensible optionally-pure exceptions</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();}; //]]> -</script></head><body id="mini"><div id="module-list"><p class="caption">Modules</p><ul><li class="module"><a href="Control-Monad-Catch.html" target="main">Control.Monad.Catch</a></li></ul></div></body></html> \ No newline at end of file +</script></head><body id="mini"><div id="module-list"><p class="caption">Modules</p><ul><li class="module"><a href="Control-Monad-Catch.html" target="main">Control.Monad.Catch</a></li><li class="module"><a href="Control-Monad-Catch-Pure.html" target="main">Control.Monad.Catch.Pure</a></li></ul></div></body></html> \ No newline at end of file diff --git a/index.html b/index.html index 695e2f37e7c5d19e940e3152eaf12f2e148902ef..d83d4f6463ccf52ec74c10945eddc73f6298df3d 100644 --- a/index.html +++ b/index.html @@ -1,5 +1,4 @@ -<!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>exceptions-0.1: Extensible optionally-pure exceptions</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[ +<!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>exceptions-0.8.0.1: Extensible optionally-pure exceptions</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();}; //]]> -</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">exceptions-0.1: Extensible optionally-pure exceptions</p></div><div id="content"><div id="description"><h1>exceptions-0.1: Extensible optionally-pure exceptions</h1><div class="doc"><p>Extensible optionally-pure exceptions -</p></div></div><div id="module-list"><p class="caption">Modules</p><ul><li><span id="control.n.1" class="module collapser" onclick="toggleSection('n.1')">Control</span><ul id="section.n.1" class="show"><li><span id="control.n.1.1" class="module collapser" onclick="toggleSection('n.1.1')">Monad</span><ul id="section.n.1.1" class="show"><li><span class="module"><a href="Control-Monad-Catch.html">Control.Monad.Catch</a></span></li></ul></li></ul></li></ul></div></div><div id="footer"><p>Produced by <a href="http://www.haskell.org/haddock/">Haddock</a> version 2.10.0</p></div></body></html> \ No newline at end of file +</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">exceptions-0.8.0.1: Extensible optionally-pure exceptions</p></div><div id="content"><div id="description"><h1>exceptions-0.8.0.1: Extensible optionally-pure exceptions</h1><div class="doc"><p>Extensible optionally-pure exceptions</p></div></div><div id="module-list"><p class="caption">Modules</p><ul><li><span id="control.n.1" class="module collapser" onclick="toggleSection('n.1')">Control</span><ul id="section.n.1" class="show"><li><span id="control.n.1.1" class="module collapser" onclick="toggleSection('n.1.1')">Monad</span><ul id="section.n.1.1" class="show"><li><span class="module"><span id="control.n.1.1.1" class="collapser" onclick="toggleSection('n.1.1.1')"> </span><a href="Control-Monad-Catch.html">Control.Monad.Catch</a></span><ul id="section.n.1.1.1" class="show"><li><span class="module"><a href="Control-Monad-Catch-Pure.html">Control.Monad.Catch.Pure</a></span></li></ul></li></ul></li></ul></li></ul></div></div><div id="footer"><p>Produced by <a href="http://www.haskell.org/haddock/">Haddock</a> version 2.15.1</p></div></body></html> \ No newline at end of file diff --git a/mini_Control-Monad-Catch-Pure.html b/mini_Control-Monad-Catch-Pure.html new file mode 100644 index 0000000000000000000000000000000000000000..314c5f52f36f74f995c40240f2887cef605ad647 --- /dev/null +++ b/mini_Control-Monad-Catch-Pure.html @@ -0,0 +1,4 @@ +<!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.Catch.Pure</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();}; +//]]> +</script></head><body id="mini"><div id="module-header"><p class="caption">Control.Monad.Catch.Pure</p></div><div id="interface"><h1>Transformer</h1><div class="top"><p class="src"><span class="keyword">data</span> <a href="Control-Monad-Catch-Pure.html#t:CatchT" target="main">CatchT</a> m a</p></div><div class="top"><p class="src"><span class="keyword">type</span> <a href="Control-Monad-Catch-Pure.html#t:Catch" target="main">Catch</a></p></div><div class="top"><p class="src"><a href="Control-Monad-Catch-Pure.html#v:runCatch" target="main">runCatch</a></p></div><div class="top"><p class="src"><a href="Control-Monad-Catch-Pure.html#v:mapCatchT" target="main">mapCatchT</a></p></div><h1>Typeclass</h1></div></body></html> \ No newline at end of file diff --git a/mini_Control-Monad-Catch.html b/mini_Control-Monad-Catch.html index 58b90787dd2098848c9138acd5ef0b499d671f08..6e830d94b71a8cf4a220c63ed47f0633cf3865f8 100644 --- a/mini_Control-Monad-Catch.html +++ b/mini_Control-Monad-Catch.html @@ -1,8 +1,4 @@ <!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.Catch</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();}; //]]> -</script></head><body id="mini"><div id="module-header"><p class="caption">Control.Monad.Catch</p></div><div id="interface"><h1>Typeclass -</h1><div class="top"><p class="src"><span class="keyword">class</span> <a href="Control-Monad-Catch.html#t:MonadCatch" target="main">MonadCatch</a> m</p></div><h1>Transformer -</h1><div class="top"><p class="src"><span class="keyword">data</span> <a href="Control-Monad-Catch.html#t:CatchT" target="main">CatchT</a> m a</p></div><div class="top"><p class="src"><span class="keyword">type</span> <a href="Control-Monad-Catch.html#t:Catch" target="main">Catch</a> </p></div><div class="top"><p class="src"><a href="Control-Monad-Catch.html#v:runCatch" target="main">runCatch</a></p></div><div class="top"><p class="src"><a href="Control-Monad-Catch.html#v:mapCatchT" target="main">mapCatchT</a></p></div><h1>Utilities -</h1><div class="top"><p class="src"><a href="Control-Monad-Catch.html#v:catchAll" target="main">catchAll</a></p></div><div class="top"><p class="src"><a href="Control-Monad-Catch.html#v:catchIOError" target="main">catchIOError</a></p></div><div class="top"><p class="src"><a href="Control-Monad-Catch.html#v:catchJust" target="main">catchJust</a></p></div><div class="top"><p class="src"><a href="Control-Monad-Catch.html#v:catchIf" target="main">catchIf</a></p></div><div class="top"><p class="src"><span class="keyword">data</span> <a href="Control-Monad-Catch.html#t:Handler" target="main">Handler</a> m a</p></div><div class="top"><p class="src"><a href="Control-Monad-Catch.html#v:catches" target="main">catches</a></p></div><div class="top"><p class="src"><a href="Control-Monad-Catch.html#v:handle" target="main">handle</a></p></div><div class="top"><p class="src"><a href="Control-Monad-Catch.html#v:handleJust" target="main">handleJust</a></p></div><div class="top"><p class="src"><a href="Control-Monad-Catch.html#v:try" target="main">try</a></p></div><div class="top"><p class="src"><a href="Control-Monad-Catch.html#v:tryJust" target="main">tryJust</a></p></div><div class="top"><p class="src"><a href="Control-Monad-Catch.html#v:onException" target="main">onException</a></p></div><div class="top"><p class="src"><a href="Control-Monad-Catch.html#v:bracket" target="main">bracket</a></p></div><div class="top"><p class="src"><a href="Control-Monad-Catch.html#v:bracket_" target="main">bracket_</a></p></div><div class="top"><p class="src"><a href="Control-Monad-Catch.html#v:finally" target="main">finally</a></p></div><div class="top"><p class="src"><a href="Control-Monad-Catch.html#v:bracketOnError" target="main">bracketOnError</a></p></div><h1>Re-exports from Control.Exception -</h1><div class="top"><p class="src"><span class="keyword">class</span> <a href="Control-Monad-Catch.html#t:Exception" target="main">Exception</a> e</p></div><div class="top"><p class="src"><span class="keyword">data</span> <a href="Control-Monad-Catch.html#t:SomeException" target="main">SomeException</a> </p></div></div></body></html> \ No newline at end of file +</script></head><body id="mini"><div id="module-header"><p class="caption">Control.Monad.Catch</p></div><div id="interface"><h1>Typeclass</h1><div class="top"><p class="src"><span class="keyword">class</span> <a href="Control-Monad-Catch.html#t:MonadThrow" target="main">MonadThrow</a> m</p></div><div class="top"><p class="src"><span class="keyword">class</span> <a href="Control-Monad-Catch.html#t:MonadCatch" target="main">MonadCatch</a> m</p></div><div class="top"><p class="src"><span class="keyword">class</span> <a href="Control-Monad-Catch.html#t:MonadMask" target="main">MonadMask</a> m</p></div><h1>Utilities</h1><div class="top"><p class="src"><a href="Control-Monad-Catch.html#v:mask_" target="main">mask_</a></p></div><div class="top"><p class="src"><a href="Control-Monad-Catch.html#v:uninterruptibleMask_" target="main">uninterruptibleMask_</a></p></div><div class="top"><p class="src"><a href="Control-Monad-Catch.html#v:catchAll" target="main">catchAll</a></p></div><div class="top"><p class="src"><a href="Control-Monad-Catch.html#v:catchIOError" target="main">catchIOError</a></p></div><div class="top"><p class="src"><a href="Control-Monad-Catch.html#v:catchJust" target="main">catchJust</a></p></div><div class="top"><p class="src"><a href="Control-Monad-Catch.html#v:catchIf" target="main">catchIf</a></p></div><div class="top"><p class="src"><span class="keyword">data</span> <a href="Control-Monad-Catch.html#t:Handler" target="main">Handler</a> m a</p></div><div class="top"><p class="src"><a href="Control-Monad-Catch.html#v:catches" target="main">catches</a></p></div><div class="top"><p class="src"><a href="Control-Monad-Catch.html#v:handle" target="main">handle</a></p></div><div class="top"><p class="src"><a href="Control-Monad-Catch.html#v:handleAll" target="main">handleAll</a></p></div><div class="top"><p class="src"><a href="Control-Monad-Catch.html#v:handleIOError" target="main">handleIOError</a></p></div><div class="top"><p class="src"><a href="Control-Monad-Catch.html#v:handleJust" target="main">handleJust</a></p></div><div class="top"><p class="src"><a href="Control-Monad-Catch.html#v:handleIf" target="main">handleIf</a></p></div><div class="top"><p class="src"><a href="Control-Monad-Catch.html#v:try" target="main">try</a></p></div><div class="top"><p class="src"><a href="Control-Monad-Catch.html#v:tryJust" target="main">tryJust</a></p></div><div class="top"><p class="src"><a href="Control-Monad-Catch.html#v:onException" target="main">onException</a></p></div><div class="top"><p class="src"><a href="Control-Monad-Catch.html#v:bracket" target="main">bracket</a></p></div><div class="top"><p class="src"><a href="Control-Monad-Catch.html#v:bracket_" target="main">bracket_</a></p></div><div class="top"><p class="src"><a href="Control-Monad-Catch.html#v:finally" target="main">finally</a></p></div><div class="top"><p class="src"><a href="Control-Monad-Catch.html#v:bracketOnError" target="main">bracketOnError</a></p></div><h1>Re-exports from Control.Exception</h1><div class="top"><p class="src"><span class="keyword">class</span> <a href="Control-Monad-Catch.html#t:Exception" target="main">Exception</a> e</p></div><div class="top"><p class="src"><span class="keyword">data</span> <a href="Control-Monad-Catch.html#t:SomeException" target="main">SomeException</a></p></div></div></body></html> \ No newline at end of file diff --git a/ocean.css b/ocean.css index e0ba8b0cc3753719e0ea5b4e08562f6a3cd0b3e2..de436324ff062ee9a4174b890c0dfc1ac4c3568a 100644 --- a/ocean.css +++ b/ocean.css @@ -49,14 +49,14 @@ a[href]:hover { text-decoration:underline; } For reasons, see: http://yui.yahooapis.com/3.1.1/build/cssfonts/fonts.css */ - + body { font:13px/1.4 sans-serif; *font-size:small; /* for IE */ *font:x-small; /* for IE in quirks mode */ } -h1 { font-size: 146.5%; /* 19pt */ } +h1 { font-size: 146.5%; /* 19pt */ } h2 { font-size: 131%; /* 17pt */ } h3 { font-size: 116%; /* 15pt */ } h4 { font-size: 100%; /* 13pt */ } @@ -98,7 +98,7 @@ pre, code, kbd, samp, tt, .src { /* @group Common */ -.caption, h1, h2, h3, h4, h5, h6 { +.caption, h1, h2, h3, h4, h5, h6 { font-weight: bold; color: rgb(78,98,114); margin: 0.8em 0 0.4em; @@ -122,7 +122,7 @@ ul.links { ul.links li { display: inline; - border-left: 1px solid #d5d5d5; + border-left: 1px solid #d5d5d5; white-space: nowrap; padding: 0; } @@ -378,6 +378,19 @@ div#style-menu-holder { margin: 0 -0.5em 0 0.5em; } +#interface span.fixity { + color: #919191; + border-left: 1px solid #919191; + padding: 0.2em 0.5em 0.2em 0.5em; + margin: 0 -1em 0 1em; +} + +#interface span.rightedge { + border-left: 1px solid #919191; + padding: 0.2em 0 0.2em 0; + margin: 0 0 0 1em; +} + #interface table { border-spacing: 2px; } #interface td { vertical-align: top; @@ -420,6 +433,18 @@ div#style-menu-holder { margin: 0; } +/* Render short-style data instances */ +.inst ul { + height: 100%; + padding: 0.5em; + margin: 0; +} + +.inst, .inst li { + list-style: none; + margin-left: 1em; +} + .top p.src { border-top: 1px solid #ccc; } @@ -429,6 +454,10 @@ div#style-menu-holder { padding-left: 2em; } +.warning { + color: red; +} + .arguments { margin-top: -0.4em; } @@ -453,13 +482,19 @@ div#style-menu-holder { /* @group Auxillary Pages */ + +.extension-list { + list-style-type: none; + margin-left: 0; +} + #mini { margin: 0 auto; padding: 0 1em 1em; } #mini > * { - font-size: 93%; /* 12pt */ + font-size: 93%; /* 12pt */ } #mini #module-list .caption, diff --git a/src/Control-Monad-Catch-Pure.html b/src/Control-Monad-Catch-Pure.html new file mode 100644 index 0000000000000000000000000000000000000000..947cf8d200d3855ccbd08a75d6f089967a8e33fb --- /dev/null +++ b/src/Control-Monad-Catch-Pure.html @@ -0,0 +1,207 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html> +<head> +<!-- Generated by HsColour, http://code.haskell.org/~malcolm/hscolour/ --> +<title>src/Control/Monad/Catch/Pure.hs</title> +<link type='text/css' rel='stylesheet' href='hscolour.css' /> +</head> +<body> +<pre><a name="line-1"></a><span class='hs-comment'>{-# LANGUAGE CPP #-}</span> +<a name="line-2"></a><span class='hs-comment'>{-# LANGUAGE ExistentialQuantification #-}</span> +<a name="line-3"></a><span class='hs-comment'>{-# LANGUAGE GeneralizedNewtypeDeriving #-}</span> +<a name="line-4"></a><span class='hs-comment'>{-# LANGUAGE RankNTypes #-}</span> +<a name="line-5"></a><span class='hs-comment'>{-# LANGUAGE FlexibleInstances #-}</span> +<a name="line-6"></a><span class='hs-comment'>{-# LANGUAGE MultiParamTypeClasses #-}</span> +<a name="line-7"></a><span class='hs-comment'>{-# LANGUAGE UndecidableInstances #-}</span> +<a name="line-8"></a> +<a name="line-9"></a><span class='hs-cpp'>#if defined(__GLASGOW_HASKELL__) && __GLASGOW_HASKELL__ >= 702</span> +<a name="line-10"></a><span class='hs-comment'>{-# LANGUAGE Trustworthy #-}</span> +<a name="line-11"></a><span class='hs-cpp'>#endif</span> +<a name="line-12"></a> +<a name="line-13"></a><span class='hs-cpp'>#ifndef MIN_VERSION_transformers</span> +<a name="line-14"></a><span class='hs-cpp'>#define MIN_VERSION_transformers(x,y,z) 1</span> +<a name="line-15"></a><span class='hs-cpp'>#endif</span> +<a name="line-16"></a> +<a name="line-17"></a><span class='hs-cpp'>#ifndef MIN_VERSION_mtl</span> +<a name="line-18"></a><span class='hs-cpp'>#define MIN_VERSION_mtl(x,y,z) 1</span> +<a name="line-19"></a><span class='hs-cpp'>#endif</span> +<a name="line-20"></a> +<a name="line-21"></a><span class='hs-comment'>--------------------------------------------------------------------</span> +<a name="line-22"></a><span class='hs-comment'>-- |</span> +<a name="line-23"></a><span class='hs-comment'>-- Copyright : (C) Edward Kmett 2013-2014, (c) Google Inc. 2012</span> +<a name="line-24"></a><span class='hs-comment'>-- License : BSD-style (see the file LICENSE)</span> +<a name="line-25"></a><span class='hs-comment'>-- Maintainer : Edward Kmett <ekmett@gmail.com></span> +<a name="line-26"></a><span class='hs-comment'>-- Stability : experimental</span> +<a name="line-27"></a><span class='hs-comment'>-- Portability : non-portable</span> +<a name="line-28"></a><span class='hs-comment'>--</span> +<a name="line-29"></a><span class='hs-comment'>-- This module supplies a \'pure\' monad transformer that can be used for</span> +<a name="line-30"></a><span class='hs-comment'>-- mock-testing code that throws exceptions, so long as those exceptions</span> +<a name="line-31"></a><span class='hs-comment'>-- are always thrown with 'throwM'.</span> +<a name="line-32"></a><span class='hs-comment'>--</span> +<a name="line-33"></a><span class='hs-comment'>-- Do not mix 'CatchT' with 'IO'. Choose one or the other for the</span> +<a name="line-34"></a><span class='hs-comment'>-- bottom of your transformer stack!</span> +<a name="line-35"></a><span class='hs-comment'>--------------------------------------------------------------------</span> +<a name="line-36"></a> +<a name="line-37"></a><span class='hs-keyword'>module</span> <span class='hs-conid'>Control</span><span class='hs-varop'>.</span><span class='hs-conid'>Monad</span><span class='hs-varop'>.</span><span class='hs-conid'>Catch</span><span class='hs-varop'>.</span><span class='hs-conid'>Pure</span> <span class='hs-layout'>(</span> +<a name="line-38"></a> <span class='hs-comment'>-- * Transformer</span> +<a name="line-39"></a> <span class='hs-comment'>-- $transformer</span> +<a name="line-40"></a> <span class='hs-conid'>CatchT</span><span class='hs-layout'>(</span><span class='hs-keyglyph'>..</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span> <span class='hs-conid'>Catch</span> +<a name="line-41"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>runCatch</span> +<a name="line-42"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>mapCatchT</span> +<a name="line-43"></a> +<a name="line-44"></a> <span class='hs-comment'>-- * Typeclass</span> +<a name="line-45"></a> <span class='hs-comment'>-- $mtl</span> +<a name="line-46"></a> <span class='hs-layout'>,</span> <span class='hs-keyword'>module</span> <span class='hs-conid'>Control</span><span class='hs-varop'>.</span><span class='hs-conid'>Monad</span><span class='hs-varop'>.</span><span class='hs-conid'>Catch</span> +<a name="line-47"></a> <span class='hs-layout'>)</span> <span class='hs-keyword'>where</span> +<a name="line-48"></a> +<a name="line-49"></a><span class='hs-cpp'>#if defined(__GLASGOW_HASKELL__) && (__GLASGOW_HASKELL__ >= 706)</span> +<a name="line-50"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Prelude</span> <span class='hs-varid'>hiding</span> <span class='hs-layout'>(</span><span class='hs-varid'>foldr</span><span class='hs-layout'>)</span> +<a name="line-51"></a><span class='hs-cpp'>#else</span> +<a name="line-52"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Prelude</span> <span class='hs-varid'>hiding</span> <span class='hs-layout'>(</span><span class='hs-varid'>catch</span><span class='hs-layout'>,</span> <span class='hs-varid'>foldr</span><span class='hs-layout'>)</span> +<a name="line-53"></a><span class='hs-cpp'>#endif</span> +<a name="line-54"></a> +<a name="line-55"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Control</span><span class='hs-varop'>.</span><span class='hs-conid'>Applicative</span> +<a name="line-56"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Control</span><span class='hs-varop'>.</span><span class='hs-conid'>Monad</span><span class='hs-varop'>.</span><span class='hs-conid'>Catch</span> +<a name="line-57"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Control</span><span class='hs-varop'>.</span><span class='hs-conid'>Monad</span><span class='hs-varop'>.</span><span class='hs-conid'>Reader</span> <span class='hs-keyword'>as</span> <span class='hs-conid'>Reader</span> +<a name="line-58"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Control</span><span class='hs-varop'>.</span><span class='hs-conid'>Monad</span><span class='hs-varop'>.</span><span class='hs-conid'>RWS</span> +<a name="line-59"></a><span class='hs-cpp'>#if __GLASGOW_HASKELL__ < 710</span> +<a name="line-60"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Data</span><span class='hs-varop'>.</span><span class='hs-conid'>Foldable</span> +<a name="line-61"></a><span class='hs-cpp'>#endif</span> +<a name="line-62"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Data</span><span class='hs-varop'>.</span><span class='hs-conid'>Functor</span><span class='hs-varop'>.</span><span class='hs-conid'>Identity</span> +<a name="line-63"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Data</span><span class='hs-varop'>.</span><span class='hs-conid'>Traversable</span> <span class='hs-keyword'>as</span> <span class='hs-conid'>Traversable</span> +<a name="line-64"></a> +<a name="line-65"></a><span class='hs-comment'>------------------------------------------------------------------------------</span> +<a name="line-66"></a><span class='hs-comment'>-- $mtl</span> +<a name="line-67"></a><span class='hs-comment'>-- The mtl style typeclass</span> +<a name="line-68"></a><span class='hs-comment'>------------------------------------------------------------------------------</span> +<a name="line-69"></a> +<a name="line-70"></a><span class='hs-comment'>------------------------------------------------------------------------------</span> +<a name="line-71"></a><span class='hs-comment'>-- $transformer</span> +<a name="line-72"></a><span class='hs-comment'>-- The @transformers@-style monad transfomer</span> +<a name="line-73"></a><span class='hs-comment'>------------------------------------------------------------------------------</span> +<a name="line-74"></a> +<a name="line-75"></a><span class='hs-comment'>-- | Add 'Exception' handling abilities to a 'Monad'.</span> +<a name="line-76"></a><span class='hs-comment'>--</span> +<a name="line-77"></a><span class='hs-comment'>-- This should /never/ be used in combination with 'IO'. Think of 'CatchT'</span> +<a name="line-78"></a><span class='hs-comment'>-- as an alternative base monad for use with mocking code that solely throws</span> +<a name="line-79"></a><span class='hs-comment'>-- exceptions via 'throwM'.</span> +<a name="line-80"></a><span class='hs-comment'>--</span> +<a name="line-81"></a><span class='hs-comment'>-- Note: that 'IO' monad has these abilities already, so stacking 'CatchT' on top</span> +<a name="line-82"></a><span class='hs-comment'>-- of it does not add any value and can possibly be confusing:</span> +<a name="line-83"></a><span class='hs-comment'>--</span> +<a name="line-84"></a><span class='hs-comment'>-- >>> (error "Hello!" :: IO ()) `catch` (\(e :: ErrorCall) -> liftIO $ print e)</span> +<a name="line-85"></a><span class='hs-comment'>-- Hello!</span> +<a name="line-86"></a><span class='hs-comment'>--</span> +<a name="line-87"></a><span class='hs-comment'>-- >>> runCatchT $ (error "Hello!" :: CatchT IO ()) `catch` (\(e :: ErrorCall) -> liftIO $ print e)</span> +<a name="line-88"></a><span class='hs-comment'>-- *** Exception: Hello!</span> +<a name="line-89"></a><span class='hs-comment'>--</span> +<a name="line-90"></a><span class='hs-comment'>-- >>> runCatchT $ (throwM (ErrorCall "Hello!") :: CatchT IO ()) `catch` (\(e :: ErrorCall) -> liftIO $ print e)</span> +<a name="line-91"></a><span class='hs-comment'>-- Hello!</span> +<a name="line-92"></a> +<a name="line-93"></a><a name="CatchT"></a><span class='hs-keyword'>newtype</span> <span class='hs-conid'>CatchT</span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>CatchT</span> <span class='hs-layout'>{</span> <span class='hs-varid'>runCatchT</span> <span class='hs-keyglyph'>::</span> <span class='hs-varid'>m</span> <span class='hs-layout'>(</span><span class='hs-conid'>Either</span> <span class='hs-conid'>SomeException</span> <span class='hs-varid'>a</span><span class='hs-layout'>)</span> <span class='hs-layout'>}</span> +<a name="line-94"></a> +<a name="line-95"></a><a name="Catch"></a><span class='hs-keyword'>type</span> <span class='hs-conid'>Catch</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>CatchT</span> <span class='hs-conid'>Identity</span> +<a name="line-96"></a> +<a name="line-97"></a><a name="runCatch"></a><span class='hs-definition'>runCatch</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Catch</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>Either</span> <span class='hs-conid'>SomeException</span> <span class='hs-varid'>a</span> +<a name="line-98"></a><span class='hs-definition'>runCatch</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>runIdentity</span> <span class='hs-varop'>.</span> <span class='hs-varid'>runCatchT</span> +<a name="line-99"></a> +<a name="line-100"></a><a name="instance%20Functor%20(CatchT%20m)"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>Monad</span> <span class='hs-varid'>m</span> <span class='hs-keyglyph'>=></span> <span class='hs-conid'>Functor</span> <span class='hs-layout'>(</span><span class='hs-conid'>CatchT</span> <span class='hs-varid'>m</span><span class='hs-layout'>)</span> <span class='hs-keyword'>where</span> +<a name="line-101"></a> <span class='hs-varid'>fmap</span> <span class='hs-varid'>f</span> <span class='hs-layout'>(</span><span class='hs-conid'>CatchT</span> <span class='hs-varid'>m</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>CatchT</span> <span class='hs-layout'>(</span><span class='hs-varid'>liftM</span> <span class='hs-layout'>(</span><span class='hs-varid'>fmap</span> <span class='hs-varid'>f</span><span class='hs-layout'>)</span> <span class='hs-varid'>m</span><span class='hs-layout'>)</span> +<a name="line-102"></a> +<a name="line-103"></a><a name="instance%20Applicative%20(CatchT%20m)"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>Monad</span> <span class='hs-varid'>m</span> <span class='hs-keyglyph'>=></span> <span class='hs-conid'>Applicative</span> <span class='hs-layout'>(</span><span class='hs-conid'>CatchT</span> <span class='hs-varid'>m</span><span class='hs-layout'>)</span> <span class='hs-keyword'>where</span> +<a name="line-104"></a> <span class='hs-varid'>pure</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>CatchT</span> <span class='hs-layout'>(</span><span class='hs-varid'>return</span> <span class='hs-layout'>(</span><span class='hs-conid'>Right</span> <span class='hs-varid'>a</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span> +<a name="line-105"></a> <span class='hs-layout'>(</span><span class='hs-varop'><*></span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>ap</span> +<a name="line-106"></a> +<a name="line-107"></a><a name="instance%20Monad%20(CatchT%20m)"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>Monad</span> <span class='hs-varid'>m</span> <span class='hs-keyglyph'>=></span> <span class='hs-conid'>Monad</span> <span class='hs-layout'>(</span><span class='hs-conid'>CatchT</span> <span class='hs-varid'>m</span><span class='hs-layout'>)</span> <span class='hs-keyword'>where</span> +<a name="line-108"></a> <span class='hs-varid'>return</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>CatchT</span> <span class='hs-layout'>(</span><span class='hs-varid'>return</span> <span class='hs-layout'>(</span><span class='hs-conid'>Right</span> <span class='hs-varid'>a</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span> +<a name="line-109"></a> <span class='hs-conid'>CatchT</span> <span class='hs-varid'>m</span> <span class='hs-varop'>>>=</span> <span class='hs-varid'>k</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>CatchT</span> <span class='hs-varop'>$</span> <span class='hs-varid'>m</span> <span class='hs-varop'>>>=</span> <span class='hs-keyglyph'>\</span><span class='hs-varid'>ea</span> <span class='hs-keyglyph'>-></span> <span class='hs-keyword'>case</span> <span class='hs-varid'>ea</span> <span class='hs-keyword'>of</span> +<a name="line-110"></a> <span class='hs-conid'>Left</span> <span class='hs-varid'>e</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>return</span> <span class='hs-layout'>(</span><span class='hs-conid'>Left</span> <span class='hs-varid'>e</span><span class='hs-layout'>)</span> +<a name="line-111"></a> <span class='hs-conid'>Right</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>runCatchT</span> <span class='hs-layout'>(</span><span class='hs-varid'>k</span> <span class='hs-varid'>a</span><span class='hs-layout'>)</span> +<a name="line-112"></a> <span class='hs-varid'>fail</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>CatchT</span> <span class='hs-varop'>.</span> <span class='hs-varid'>return</span> <span class='hs-varop'>.</span> <span class='hs-conid'>Left</span> <span class='hs-varop'>.</span> <span class='hs-varid'>toException</span> <span class='hs-varop'>.</span> <span class='hs-varid'>userError</span> +<a name="line-113"></a> +<a name="line-114"></a><a name="instance%20MonadFix%20(CatchT%20m)"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>MonadFix</span> <span class='hs-varid'>m</span> <span class='hs-keyglyph'>=></span> <span class='hs-conid'>MonadFix</span> <span class='hs-layout'>(</span><span class='hs-conid'>CatchT</span> <span class='hs-varid'>m</span><span class='hs-layout'>)</span> <span class='hs-keyword'>where</span> +<a name="line-115"></a> <span class='hs-varid'>mfix</span> <span class='hs-varid'>f</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>CatchT</span> <span class='hs-varop'>$</span> <span class='hs-varid'>mfix</span> <span class='hs-varop'>$</span> <span class='hs-keyglyph'>\</span><span class='hs-varid'>a</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>runCatchT</span> <span class='hs-varop'>$</span> <span class='hs-varid'>f</span> <span class='hs-varop'>$</span> <span class='hs-keyword'>case</span> <span class='hs-varid'>a</span> <span class='hs-keyword'>of</span> +<a name="line-116"></a> <span class='hs-conid'>Right</span> <span class='hs-varid'>r</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>r</span> +<a name="line-117"></a> <span class='hs-keyword'>_</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>error</span> <span class='hs-str'>"empty mfix argument"</span> +<a name="line-118"></a> +<a name="line-119"></a><a name="instance%20Foldable%20(CatchT%20m)"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>Foldable</span> <span class='hs-varid'>m</span> <span class='hs-keyglyph'>=></span> <span class='hs-conid'>Foldable</span> <span class='hs-layout'>(</span><span class='hs-conid'>CatchT</span> <span class='hs-varid'>m</span><span class='hs-layout'>)</span> <span class='hs-keyword'>where</span> +<a name="line-120"></a> <span class='hs-varid'>foldMap</span> <span class='hs-varid'>f</span> <span class='hs-layout'>(</span><span class='hs-conid'>CatchT</span> <span class='hs-varid'>m</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>foldMap</span> <span class='hs-layout'>(</span><span class='hs-varid'>foldMapEither</span> <span class='hs-varid'>f</span><span class='hs-layout'>)</span> <span class='hs-varid'>m</span> <span class='hs-keyword'>where</span> +<a name="line-121"></a> <span class='hs-varid'>foldMapEither</span> <span class='hs-varid'>g</span> <span class='hs-layout'>(</span><span class='hs-conid'>Right</span> <span class='hs-varid'>a</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>g</span> <span class='hs-varid'>a</span> +<a name="line-122"></a> <span class='hs-varid'>foldMapEither</span> <span class='hs-keyword'>_</span> <span class='hs-layout'>(</span><span class='hs-conid'>Left</span> <span class='hs-keyword'>_</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>mempty</span> +<a name="line-123"></a> +<a name="line-124"></a><a name="instance%20Traversable%20(CatchT%20m)"></a><span class='hs-keyword'>instance</span> <span class='hs-layout'>(</span><span class='hs-conid'>Monad</span> <span class='hs-varid'>m</span><span class='hs-layout'>,</span> <span class='hs-conid'>Traversable</span> <span class='hs-varid'>m</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=></span> <span class='hs-conid'>Traversable</span> <span class='hs-layout'>(</span><span class='hs-conid'>CatchT</span> <span class='hs-varid'>m</span><span class='hs-layout'>)</span> <span class='hs-keyword'>where</span> +<a name="line-125"></a> <span class='hs-varid'>traverse</span> <span class='hs-varid'>f</span> <span class='hs-layout'>(</span><span class='hs-conid'>CatchT</span> <span class='hs-varid'>m</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>CatchT</span> <span class='hs-varop'><$></span> <span class='hs-conid'>Traversable</span><span class='hs-varop'>.</span><span class='hs-varid'>traverse</span> <span class='hs-layout'>(</span><span class='hs-varid'>traverseEither</span> <span class='hs-varid'>f</span><span class='hs-layout'>)</span> <span class='hs-varid'>m</span> <span class='hs-keyword'>where</span> +<a name="line-126"></a> <span class='hs-varid'>traverseEither</span> <span class='hs-varid'>g</span> <span class='hs-layout'>(</span><span class='hs-conid'>Right</span> <span class='hs-varid'>a</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Right</span> <span class='hs-varop'><$></span> <span class='hs-varid'>g</span> <span class='hs-varid'>a</span> +<a name="line-127"></a> <span class='hs-varid'>traverseEither</span> <span class='hs-keyword'>_</span> <span class='hs-layout'>(</span><span class='hs-conid'>Left</span> <span class='hs-varid'>e</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>pure</span> <span class='hs-layout'>(</span><span class='hs-conid'>Left</span> <span class='hs-varid'>e</span><span class='hs-layout'>)</span> +<a name="line-128"></a> +<a name="line-129"></a><a name="instance%20Alternative%20(CatchT%20m)"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>Monad</span> <span class='hs-varid'>m</span> <span class='hs-keyglyph'>=></span> <span class='hs-conid'>Alternative</span> <span class='hs-layout'>(</span><span class='hs-conid'>CatchT</span> <span class='hs-varid'>m</span><span class='hs-layout'>)</span> <span class='hs-keyword'>where</span> +<a name="line-130"></a> <span class='hs-varid'>empty</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>mzero</span> +<a name="line-131"></a> <span class='hs-layout'>(</span><span class='hs-varop'><|></span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>mplus</span> +<a name="line-132"></a> +<a name="line-133"></a><a name="instance%20MonadPlus%20(CatchT%20m)"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>Monad</span> <span class='hs-varid'>m</span> <span class='hs-keyglyph'>=></span> <span class='hs-conid'>MonadPlus</span> <span class='hs-layout'>(</span><span class='hs-conid'>CatchT</span> <span class='hs-varid'>m</span><span class='hs-layout'>)</span> <span class='hs-keyword'>where</span> +<a name="line-134"></a> <span class='hs-varid'>mzero</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>CatchT</span> <span class='hs-varop'>$</span> <span class='hs-varid'>return</span> <span class='hs-varop'>$</span> <span class='hs-conid'>Left</span> <span class='hs-varop'>$</span> <span class='hs-varid'>toException</span> <span class='hs-varop'>$</span> <span class='hs-varid'>userError</span> <span class='hs-str'>""</span> +<a name="line-135"></a> <span class='hs-varid'>mplus</span> <span class='hs-layout'>(</span><span class='hs-conid'>CatchT</span> <span class='hs-varid'>m</span><span class='hs-layout'>)</span> <span class='hs-layout'>(</span><span class='hs-conid'>CatchT</span> <span class='hs-varid'>n</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>CatchT</span> <span class='hs-varop'>$</span> <span class='hs-varid'>m</span> <span class='hs-varop'>>>=</span> <span class='hs-keyglyph'>\</span><span class='hs-varid'>ea</span> <span class='hs-keyglyph'>-></span> <span class='hs-keyword'>case</span> <span class='hs-varid'>ea</span> <span class='hs-keyword'>of</span> +<a name="line-136"></a> <span class='hs-conid'>Left</span> <span class='hs-keyword'>_</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>n</span> +<a name="line-137"></a> <span class='hs-conid'>Right</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>return</span> <span class='hs-layout'>(</span><span class='hs-conid'>Right</span> <span class='hs-varid'>a</span><span class='hs-layout'>)</span> +<a name="line-138"></a> +<a name="line-139"></a><a name="instance%20MonadTrans%20CatchT"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>MonadTrans</span> <span class='hs-conid'>CatchT</span> <span class='hs-keyword'>where</span> +<a name="line-140"></a> <span class='hs-varid'>lift</span> <span class='hs-varid'>m</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>CatchT</span> <span class='hs-varop'>$</span> <span class='hs-keyword'>do</span> +<a name="line-141"></a> <span class='hs-varid'>a</span> <span class='hs-keyglyph'><-</span> <span class='hs-varid'>m</span> +<a name="line-142"></a> <span class='hs-varid'>return</span> <span class='hs-varop'>$</span> <span class='hs-conid'>Right</span> <span class='hs-varid'>a</span> +<a name="line-143"></a> +<a name="line-144"></a><a name="instance%20MonadIO%20(CatchT%20m)"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>MonadIO</span> <span class='hs-varid'>m</span> <span class='hs-keyglyph'>=></span> <span class='hs-conid'>MonadIO</span> <span class='hs-layout'>(</span><span class='hs-conid'>CatchT</span> <span class='hs-varid'>m</span><span class='hs-layout'>)</span> <span class='hs-keyword'>where</span> +<a name="line-145"></a> <span class='hs-varid'>liftIO</span> <span class='hs-varid'>m</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>CatchT</span> <span class='hs-varop'>$</span> <span class='hs-keyword'>do</span> +<a name="line-146"></a> <span class='hs-varid'>a</span> <span class='hs-keyglyph'><-</span> <span class='hs-varid'>liftIO</span> <span class='hs-varid'>m</span> +<a name="line-147"></a> <span class='hs-varid'>return</span> <span class='hs-varop'>$</span> <span class='hs-conid'>Right</span> <span class='hs-varid'>a</span> +<a name="line-148"></a> +<a name="line-149"></a><a name="instance%20MonadThrow%20(CatchT%20m)"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>Monad</span> <span class='hs-varid'>m</span> <span class='hs-keyglyph'>=></span> <span class='hs-conid'>MonadThrow</span> <span class='hs-layout'>(</span><span class='hs-conid'>CatchT</span> <span class='hs-varid'>m</span><span class='hs-layout'>)</span> <span class='hs-keyword'>where</span> +<a name="line-150"></a> <span class='hs-varid'>throwM</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>CatchT</span> <span class='hs-varop'>.</span> <span class='hs-varid'>return</span> <span class='hs-varop'>.</span> <span class='hs-conid'>Left</span> <span class='hs-varop'>.</span> <span class='hs-varid'>toException</span> +<a name="line-151"></a><a name="instance%20MonadCatch%20(CatchT%20m)"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>Monad</span> <span class='hs-varid'>m</span> <span class='hs-keyglyph'>=></span> <span class='hs-conid'>MonadCatch</span> <span class='hs-layout'>(</span><span class='hs-conid'>CatchT</span> <span class='hs-varid'>m</span><span class='hs-layout'>)</span> <span class='hs-keyword'>where</span> +<a name="line-152"></a> <span class='hs-varid'>catch</span> <span class='hs-layout'>(</span><span class='hs-conid'>CatchT</span> <span class='hs-varid'>m</span><span class='hs-layout'>)</span> <span class='hs-varid'>c</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>CatchT</span> <span class='hs-varop'>$</span> <span class='hs-varid'>m</span> <span class='hs-varop'>>>=</span> <span class='hs-keyglyph'>\</span><span class='hs-varid'>ea</span> <span class='hs-keyglyph'>-></span> <span class='hs-keyword'>case</span> <span class='hs-varid'>ea</span> <span class='hs-keyword'>of</span> +<a name="line-153"></a> <span class='hs-conid'>Left</span> <span class='hs-varid'>e</span> <span class='hs-keyglyph'>-></span> <span class='hs-keyword'>case</span> <span class='hs-varid'>fromException</span> <span class='hs-varid'>e</span> <span class='hs-keyword'>of</span> +<a name="line-154"></a> <span class='hs-conid'>Just</span> <span class='hs-varid'>e'</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>runCatchT</span> <span class='hs-layout'>(</span><span class='hs-varid'>c</span> <span class='hs-varid'>e'</span><span class='hs-layout'>)</span> +<a name="line-155"></a> <span class='hs-conid'>Nothing</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>return</span> <span class='hs-layout'>(</span><span class='hs-conid'>Left</span> <span class='hs-varid'>e</span><span class='hs-layout'>)</span> +<a name="line-156"></a> <span class='hs-conid'>Right</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>return</span> <span class='hs-layout'>(</span><span class='hs-conid'>Right</span> <span class='hs-varid'>a</span><span class='hs-layout'>)</span> +<a name="line-157"></a><a name="instance%20MonadMask%20(CatchT%20m)"></a><span class='hs-comment'>-- | Note: This instance is only valid if the underlying monad has a single</span> +<a name="line-158"></a><a name="instance%20MonadMask%20(CatchT%20m)"></a><span class='hs-comment'>-- exit point!</span> +<a name="line-159"></a><a name="instance%20MonadMask%20(CatchT%20m)"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>Monad</span> <span class='hs-varid'>m</span> <span class='hs-keyglyph'>=></span> <span class='hs-conid'>MonadMask</span> <span class='hs-layout'>(</span><span class='hs-conid'>CatchT</span> <span class='hs-varid'>m</span><span class='hs-layout'>)</span> <span class='hs-keyword'>where</span> +<a name="line-160"></a> <span class='hs-varid'>mask</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>a</span> <span class='hs-varid'>id</span> +<a name="line-161"></a> <span class='hs-varid'>uninterruptibleMask</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>a</span> <span class='hs-varid'>id</span> +<a name="line-162"></a> +<a name="line-163"></a><a name="instance%20MonadState%20s%20(CatchT%20m)"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>MonadState</span> <span class='hs-varid'>s</span> <span class='hs-varid'>m</span> <span class='hs-keyglyph'>=></span> <span class='hs-conid'>MonadState</span> <span class='hs-varid'>s</span> <span class='hs-layout'>(</span><span class='hs-conid'>CatchT</span> <span class='hs-varid'>m</span><span class='hs-layout'>)</span> <span class='hs-keyword'>where</span> +<a name="line-164"></a> <span class='hs-varid'>get</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>lift</span> <span class='hs-varid'>get</span> +<a name="line-165"></a> <span class='hs-varid'>put</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>lift</span> <span class='hs-varop'>.</span> <span class='hs-varid'>put</span> +<a name="line-166"></a><span class='hs-cpp'>#if MIN_VERSION_mtl(2,1,0)</span> +<a name="line-167"></a> <span class='hs-varid'>state</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>lift</span> <span class='hs-varop'>.</span> <span class='hs-varid'>state</span> +<a name="line-168"></a><span class='hs-cpp'>#endif</span> +<a name="line-169"></a> +<a name="line-170"></a><a name="instance%20MonadReader%20e%20(CatchT%20m)"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>MonadReader</span> <span class='hs-varid'>e</span> <span class='hs-varid'>m</span> <span class='hs-keyglyph'>=></span> <span class='hs-conid'>MonadReader</span> <span class='hs-varid'>e</span> <span class='hs-layout'>(</span><span class='hs-conid'>CatchT</span> <span class='hs-varid'>m</span><span class='hs-layout'>)</span> <span class='hs-keyword'>where</span> +<a name="line-171"></a> <span class='hs-varid'>ask</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>lift</span> <span class='hs-varid'>ask</span> +<a name="line-172"></a> <span class='hs-varid'>local</span> <span class='hs-varid'>f</span> <span class='hs-layout'>(</span><span class='hs-conid'>CatchT</span> <span class='hs-varid'>m</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>CatchT</span> <span class='hs-layout'>(</span><span class='hs-varid'>local</span> <span class='hs-varid'>f</span> <span class='hs-varid'>m</span><span class='hs-layout'>)</span> +<a name="line-173"></a> +<a name="line-174"></a><a name="instance%20MonadWriter%20w%20(CatchT%20m)"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>MonadWriter</span> <span class='hs-varid'>w</span> <span class='hs-varid'>m</span> <span class='hs-keyglyph'>=></span> <span class='hs-conid'>MonadWriter</span> <span class='hs-varid'>w</span> <span class='hs-layout'>(</span><span class='hs-conid'>CatchT</span> <span class='hs-varid'>m</span><span class='hs-layout'>)</span> <span class='hs-keyword'>where</span> +<a name="line-175"></a> <span class='hs-varid'>tell</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>lift</span> <span class='hs-varop'>.</span> <span class='hs-varid'>tell</span> +<a name="line-176"></a> <span class='hs-varid'>listen</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>mapCatchT</span> <span class='hs-varop'>$</span> <span class='hs-keyglyph'>\</span> <span class='hs-varid'>m</span> <span class='hs-keyglyph'>-></span> <span class='hs-keyword'>do</span> +<a name="line-177"></a> <span class='hs-layout'>(</span><span class='hs-varid'>a</span><span class='hs-layout'>,</span> <span class='hs-varid'>w</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'><-</span> <span class='hs-varid'>listen</span> <span class='hs-varid'>m</span> +<a name="line-178"></a> <span class='hs-varid'>return</span> <span class='hs-varop'>$!</span> <span class='hs-varid'>fmap</span> <span class='hs-layout'>(</span><span class='hs-keyglyph'>\</span> <span class='hs-varid'>r</span> <span class='hs-keyglyph'>-></span> <span class='hs-layout'>(</span><span class='hs-varid'>r</span><span class='hs-layout'>,</span> <span class='hs-varid'>w</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span> <span class='hs-varid'>a</span> +<a name="line-179"></a> <span class='hs-varid'>pass</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>mapCatchT</span> <span class='hs-varop'>$</span> <span class='hs-keyglyph'>\</span> <span class='hs-varid'>m</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>pass</span> <span class='hs-varop'>$</span> <span class='hs-keyword'>do</span> +<a name="line-180"></a> <span class='hs-varid'>a</span> <span class='hs-keyglyph'><-</span> <span class='hs-varid'>m</span> +<a name="line-181"></a> <span class='hs-varid'>return</span> <span class='hs-varop'>$!</span> <span class='hs-keyword'>case</span> <span class='hs-varid'>a</span> <span class='hs-keyword'>of</span> +<a name="line-182"></a> <span class='hs-conid'>Left</span> <span class='hs-varid'>l</span> <span class='hs-keyglyph'>-></span> <span class='hs-layout'>(</span><span class='hs-conid'>Left</span> <span class='hs-varid'>l</span><span class='hs-layout'>,</span> <span class='hs-varid'>id</span><span class='hs-layout'>)</span> +<a name="line-183"></a> <span class='hs-conid'>Right</span> <span class='hs-layout'>(</span><span class='hs-varid'>r</span><span class='hs-layout'>,</span> <span class='hs-varid'>f</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-></span> <span class='hs-layout'>(</span><span class='hs-conid'>Right</span> <span class='hs-varid'>r</span><span class='hs-layout'>,</span> <span class='hs-varid'>f</span><span class='hs-layout'>)</span> +<a name="line-184"></a><span class='hs-cpp'>#if MIN_VERSION_mtl(2,1,0)</span> +<a name="line-185"></a> <span class='hs-varid'>writer</span> <span class='hs-varid'>aw</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>CatchT</span> <span class='hs-layout'>(</span><span class='hs-conid'>Right</span> <span class='hs-varop'>`liftM`</span> <span class='hs-varid'>writer</span> <span class='hs-varid'>aw</span><span class='hs-layout'>)</span> +<a name="line-186"></a><span class='hs-cpp'>#endif</span> +<a name="line-187"></a> +<a name="line-188"></a><a name="instance%20MonadRWS%20r%20w%20s%20(CatchT%20m)%20--%20%7c%20Map%20the%20unwrapped%20computation%20using%20the%20given%20function.%20--%20--%20@'runCatchT'%20('mapCatchT'%20f%20m)%20=%20f%20('runCatchT'%20m)@%20mapCatchT%20::%20(m%20(Either%20SomeException%20a)%20-%3e%20n%20(Either%20SomeException%20b))%20-%3e%20CatchT%20m%20a%20-%3e%20CatchT%20n%20b%20mapCatchT%20f%20m%20=%20CatchT%20$%20f%20(runCatchT%20m)"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>MonadRWS</span> <span class='hs-varid'>r</span> <span class='hs-varid'>w</span> <span class='hs-varid'>s</span> <span class='hs-varid'>m</span> <span class='hs-keyglyph'>=></span> <span class='hs-conid'>MonadRWS</span> <span class='hs-varid'>r</span> <span class='hs-varid'>w</span> <span class='hs-varid'>s</span> <span class='hs-layout'>(</span><span class='hs-conid'>CatchT</span> <span class='hs-varid'>m</span><span class='hs-layout'>)</span> +<a name="line-189"></a> +<a name="line-190"></a><a name="mapCatchT"></a><span class='hs-comment'>-- | Map the unwrapped computation using the given function.</span> +<a name="line-191"></a><span class='hs-comment'>--</span> +<a name="line-192"></a><span class='hs-comment'>-- @'runCatchT' ('mapCatchT' f m) = f ('runCatchT' m)@</span> +<a name="line-193"></a><span class='hs-definition'>mapCatchT</span> <span class='hs-keyglyph'>::</span> <span class='hs-layout'>(</span><span class='hs-varid'>m</span> <span class='hs-layout'>(</span><span class='hs-conid'>Either</span> <span class='hs-conid'>SomeException</span> <span class='hs-varid'>a</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>n</span> <span class='hs-layout'>(</span><span class='hs-conid'>Either</span> <span class='hs-conid'>SomeException</span> <span class='hs-varid'>b</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span> +<a name="line-194"></a> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>CatchT</span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span> +<a name="line-195"></a> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>CatchT</span> <span class='hs-varid'>n</span> <span class='hs-varid'>b</span> +<a name="line-196"></a><span class='hs-definition'>mapCatchT</span> <span class='hs-varid'>f</span> <span class='hs-varid'>m</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>CatchT</span> <span class='hs-varop'>$</span> <span class='hs-varid'>f</span> <span class='hs-layout'>(</span><span class='hs-varid'>runCatchT</span> <span class='hs-varid'>m</span><span class='hs-layout'>)</span> +</pre></body> +</html> diff --git a/src/Control-Monad-Catch.html b/src/Control-Monad-Catch.html index 4f71e7dfefbbae000d4166bf2871f5f4711f9cfb..c2537bab0f65308c330c795e07c052b42cbf342b 100644 --- a/src/Control-Monad-Catch.html +++ b/src/Control-Monad-Catch.html @@ -7,394 +7,460 @@ <link type='text/css' rel='stylesheet' href='hscolour.css' /> </head> <body> -<pre><a name="line-1"></a><span class='hs-comment'>{- -<a name="line-2"></a>Copyright 2012 Google Inc. All Rights Reserved. -<a name="line-3"></a> -<a name="line-4"></a>Licensed under the Apache License, Version 2.0 (the "License"); -<a name="line-5"></a>you may not use this file except in compliance with the License. -<a name="line-6"></a>You may obtain a copy of the License at -<a name="line-7"></a> -<a name="line-8"></a> <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a> +<pre><a name="line-1"></a><span class='hs-comment'>{-# LANGUAGE CPP #-}</span> +<a name="line-2"></a><span class='hs-comment'>{-# LANGUAGE ExistentialQuantification #-}</span> +<a name="line-3"></a><span class='hs-comment'>{-# LANGUAGE GeneralizedNewtypeDeriving #-}</span> +<a name="line-4"></a><span class='hs-comment'>{-# LANGUAGE RankNTypes #-}</span> +<a name="line-5"></a><span class='hs-comment'>{-# LANGUAGE FlexibleInstances #-}</span> +<a name="line-6"></a><span class='hs-comment'>{-# LANGUAGE MultiParamTypeClasses #-}</span> +<a name="line-7"></a><span class='hs-comment'>{-# LANGUAGE UndecidableInstances #-}</span> +<a name="line-8"></a><span class='hs-comment'>{-# LANGUAGE TypeFamilies #-}</span> <a name="line-9"></a> -<a name="line-10"></a>Unless required by applicable law or agreed to in writing, software -<a name="line-11"></a>distributed under the License is distributed on an "AS IS" BASIS, -<a name="line-12"></a>WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -<a name="line-13"></a>See the License for the specific language governing permissions and -<a name="line-14"></a>limitations under the License. -<a name="line-15"></a>-}</span> -<a name="line-16"></a> -<a name="line-17"></a><span class='hs-comment'>{-# LANGUAGE CPP #-}</span> -<a name="line-18"></a><span class='hs-comment'>{-# LANGUAGE ExistentialQuantification #-}</span> -<a name="line-19"></a><span class='hs-comment'>{-# LANGUAGE GeneralizedNewtypeDeriving #-}</span> -<a name="line-20"></a><span class='hs-comment'>{-# LANGUAGE RankNTypes #-}</span> -<a name="line-21"></a><span class='hs-comment'>{-# LANGUAGE FlexibleInstances #-}</span> -<a name="line-22"></a><span class='hs-comment'>{-# LANGUAGE MultiParamTypeClasses #-}</span> -<a name="line-23"></a><span class='hs-comment'>{-# LANGUAGE UndecidableInstances #-}</span> -<a name="line-24"></a> -<a name="line-25"></a><span class='hs-cpp'>#ifndef MIN_VERSION_transformers</span> -<a name="line-26"></a><span class='hs-cpp'>#define MIN_VERSION_transformers(x,y,z) 1</span> -<a name="line-27"></a><span class='hs-cpp'>#endif</span> -<a name="line-28"></a> -<a name="line-29"></a><span class='hs-cpp'>#ifndef MIN_VERSION_mtl</span> -<a name="line-30"></a><span class='hs-cpp'>#define MIN_VERSION_mtl(x,y,z) 1</span> -<a name="line-31"></a><span class='hs-cpp'>#endif</span> -<a name="line-32"></a> -<a name="line-33"></a><span class='hs-comment'>--------------------------------------------------------------------</span> -<a name="line-34"></a><span class='hs-comment'>-- |</span> -<a name="line-35"></a><span class='hs-comment'>-- Copyright : (c) Edward Kmett 2013, (c) Google Inc. 2012</span> -<a name="line-36"></a><span class='hs-comment'>-- License : BSD3</span> -<a name="line-37"></a><span class='hs-comment'>-- Maintainer: Edward Kmett <ekmett@gmail.com></span> -<a name="line-38"></a><span class='hs-comment'>-- Stability : experimental</span> -<a name="line-39"></a><span class='hs-comment'>-- Portability: non-portable</span> -<a name="line-40"></a><span class='hs-comment'>--</span> -<a name="line-41"></a><span class='hs-comment'>-- This module supports monads that can throw extensible exceptions. The</span> -<a name="line-42"></a><span class='hs-comment'>-- exceptions are the very same from "Control.Exception", and the operations</span> -<a name="line-43"></a><span class='hs-comment'>-- offered very similar, but here they are not limited to 'IO'.</span> -<a name="line-44"></a><span class='hs-comment'>--</span> -<a name="line-45"></a><span class='hs-comment'>-- This code is in the style of both transformers and mtl, and is compatible</span> -<a name="line-46"></a><span class='hs-comment'>-- with them, though doesn't mimic the module structure or offer the complete</span> -<a name="line-47"></a><span class='hs-comment'>-- range of features in those packages.</span> -<a name="line-48"></a><span class='hs-comment'>--</span> -<a name="line-49"></a><span class='hs-comment'>-- This is very similar to 'ErrorT' and 'MonadError', but based on features of</span> -<a name="line-50"></a><span class='hs-comment'>-- "Control.Exception". In particular, it handles the complex case of</span> -<a name="line-51"></a><span class='hs-comment'>-- asynchronous exceptions by including 'mask' in the typeclass. Note that the</span> -<a name="line-52"></a><span class='hs-comment'>-- extensible extensions feature relies the RankNTypes language extension.</span> -<a name="line-53"></a><span class='hs-comment'>--------------------------------------------------------------------</span> -<a name="line-54"></a> -<a name="line-55"></a><span class='hs-keyword'>module</span> <span class='hs-conid'>Control</span><span class='hs-varop'>.</span><span class='hs-conid'>Monad</span><span class='hs-varop'>.</span><span class='hs-conid'>Catch</span> <span class='hs-layout'>(</span> -<a name="line-56"></a> <span class='hs-comment'>-- * Typeclass</span> -<a name="line-57"></a> <span class='hs-comment'>-- $mtl</span> -<a name="line-58"></a> <span class='hs-conid'>MonadCatch</span><span class='hs-layout'>(</span><span class='hs-keyglyph'>..</span><span class='hs-layout'>)</span> -<a name="line-59"></a> -<a name="line-60"></a> <span class='hs-comment'>-- * Transformer</span> -<a name="line-61"></a> <span class='hs-comment'>-- $transformer</span> -<a name="line-62"></a> <span class='hs-layout'>,</span> <span class='hs-conid'>CatchT</span><span class='hs-layout'>(</span><span class='hs-keyglyph'>..</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span> <span class='hs-conid'>Catch</span> -<a name="line-63"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>runCatch</span> -<a name="line-64"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>mapCatchT</span> -<a name="line-65"></a> -<a name="line-66"></a> <span class='hs-comment'>-- * Utilities</span> -<a name="line-67"></a> <span class='hs-comment'>-- $utilities</span> -<a name="line-68"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>catchAll</span> -<a name="line-69"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>catchIOError</span> -<a name="line-70"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>catchJust</span> -<a name="line-71"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>catchIf</span> -<a name="line-72"></a> <span class='hs-layout'>,</span> <span class='hs-conid'>Handler</span><span class='hs-layout'>(</span><span class='hs-keyglyph'>..</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span> <span class='hs-varid'>catches</span> -<a name="line-73"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>handle</span> -<a name="line-74"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>handleJust</span> -<a name="line-75"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>try</span> -<a name="line-76"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>tryJust</span> -<a name="line-77"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>onException</span> -<a name="line-78"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>bracket</span> -<a name="line-79"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>bracket_</span> -<a name="line-80"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>finally</span> -<a name="line-81"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>bracketOnError</span> -<a name="line-82"></a> <span class='hs-comment'>-- * Re-exports from Control.Exception</span> -<a name="line-83"></a> <span class='hs-layout'>,</span> <span class='hs-conid'>Exception</span><span class='hs-layout'>(</span><span class='hs-keyglyph'>..</span><span class='hs-layout'>)</span> -<a name="line-84"></a> <span class='hs-layout'>,</span> <span class='hs-conid'>SomeException</span><span class='hs-layout'>(</span><span class='hs-keyglyph'>..</span><span class='hs-layout'>)</span> -<a name="line-85"></a> <span class='hs-layout'>)</span> <span class='hs-keyword'>where</span> -<a name="line-86"></a> -<a name="line-87"></a><span class='hs-cpp'>#if defined(__GLASGOW_HASKELL__) && (__GLASGOW_HASKELL__ >= 706)</span> -<a name="line-88"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Prelude</span> <span class='hs-varid'>hiding</span> <span class='hs-layout'>(</span><span class='hs-varid'>foldr</span><span class='hs-layout'>)</span> -<a name="line-89"></a><span class='hs-cpp'>#else</span> -<a name="line-90"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Prelude</span> <span class='hs-varid'>hiding</span> <span class='hs-layout'>(</span><span class='hs-varid'>catch</span><span class='hs-layout'>,</span> <span class='hs-varid'>foldr</span><span class='hs-layout'>)</span> -<a name="line-91"></a><span class='hs-cpp'>#endif</span> -<a name="line-92"></a> -<a name="line-93"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Control</span><span class='hs-varop'>.</span><span class='hs-conid'>Applicative</span> -<a name="line-94"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Control</span><span class='hs-varop'>.</span><span class='hs-conid'>Exception</span> <span class='hs-layout'>(</span><span class='hs-conid'>Exception</span><span class='hs-layout'>(</span><span class='hs-keyglyph'>..</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span> <span class='hs-conid'>SomeException</span><span class='hs-layout'>(</span><span class='hs-keyglyph'>..</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span> -<a name="line-95"></a><span class='hs-keyword'>import</span> <span class='hs-keyword'>qualified</span> <span class='hs-conid'>Control</span><span class='hs-varop'>.</span><span class='hs-conid'>Exception</span> <span class='hs-keyword'>as</span> <span class='hs-conid'>ControlException</span> -<a name="line-96"></a><span class='hs-keyword'>import</span> <span class='hs-keyword'>qualified</span> <span class='hs-conid'>Control</span><span class='hs-varop'>.</span><span class='hs-conid'>Monad</span><span class='hs-varop'>.</span><span class='hs-conid'>Trans</span><span class='hs-varop'>.</span><span class='hs-conid'>RWS</span><span class='hs-varop'>.</span><span class='hs-conid'>Lazy</span> <span class='hs-keyword'>as</span> <span class='hs-conid'>LazyRWS</span> -<a name="line-97"></a><span class='hs-keyword'>import</span> <span class='hs-keyword'>qualified</span> <span class='hs-conid'>Control</span><span class='hs-varop'>.</span><span class='hs-conid'>Monad</span><span class='hs-varop'>.</span><span class='hs-conid'>Trans</span><span class='hs-varop'>.</span><span class='hs-conid'>RWS</span><span class='hs-varop'>.</span><span class='hs-conid'>Strict</span> <span class='hs-keyword'>as</span> <span class='hs-conid'>StrictRWS</span> -<a name="line-98"></a><span class='hs-keyword'>import</span> <span class='hs-keyword'>qualified</span> <span class='hs-conid'>Control</span><span class='hs-varop'>.</span><span class='hs-conid'>Monad</span><span class='hs-varop'>.</span><span class='hs-conid'>Trans</span><span class='hs-varop'>.</span><span class='hs-conid'>State</span><span class='hs-varop'>.</span><span class='hs-conid'>Lazy</span> <span class='hs-keyword'>as</span> <span class='hs-conid'>LazyS</span> -<a name="line-99"></a><span class='hs-keyword'>import</span> <span class='hs-keyword'>qualified</span> <span class='hs-conid'>Control</span><span class='hs-varop'>.</span><span class='hs-conid'>Monad</span><span class='hs-varop'>.</span><span class='hs-conid'>Trans</span><span class='hs-varop'>.</span><span class='hs-conid'>State</span><span class='hs-varop'>.</span><span class='hs-conid'>Strict</span> <span class='hs-keyword'>as</span> <span class='hs-conid'>StrictS</span> -<a name="line-100"></a><span class='hs-keyword'>import</span> <span class='hs-keyword'>qualified</span> <span class='hs-conid'>Control</span><span class='hs-varop'>.</span><span class='hs-conid'>Monad</span><span class='hs-varop'>.</span><span class='hs-conid'>Trans</span><span class='hs-varop'>.</span><span class='hs-conid'>Writer</span><span class='hs-varop'>.</span><span class='hs-conid'>Lazy</span> <span class='hs-keyword'>as</span> <span class='hs-conid'>LazyW</span> -<a name="line-101"></a><span class='hs-keyword'>import</span> <span class='hs-keyword'>qualified</span> <span class='hs-conid'>Control</span><span class='hs-varop'>.</span><span class='hs-conid'>Monad</span><span class='hs-varop'>.</span><span class='hs-conid'>Trans</span><span class='hs-varop'>.</span><span class='hs-conid'>Writer</span><span class='hs-varop'>.</span><span class='hs-conid'>Strict</span> <span class='hs-keyword'>as</span> <span class='hs-conid'>StrictW</span> -<a name="line-102"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Control</span><span class='hs-varop'>.</span><span class='hs-conid'>Monad</span><span class='hs-varop'>.</span><span class='hs-conid'>Trans</span><span class='hs-varop'>.</span><span class='hs-conid'>Identity</span> -<a name="line-103"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Control</span><span class='hs-varop'>.</span><span class='hs-conid'>Monad</span><span class='hs-varop'>.</span><span class='hs-conid'>Reader</span> <span class='hs-keyword'>as</span> <span class='hs-conid'>Reader</span> -<a name="line-104"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Control</span><span class='hs-varop'>.</span><span class='hs-conid'>Monad</span><span class='hs-varop'>.</span><span class='hs-conid'>RWS</span> -<a name="line-105"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Data</span><span class='hs-varop'>.</span><span class='hs-conid'>Foldable</span> -<a name="line-106"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Data</span><span class='hs-varop'>.</span><span class='hs-conid'>Functor</span><span class='hs-varop'>.</span><span class='hs-conid'>Identity</span> -<a name="line-107"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Data</span><span class='hs-varop'>.</span><span class='hs-conid'>Traversable</span> <span class='hs-keyword'>as</span> <span class='hs-conid'>Traversable</span> -<a name="line-108"></a> -<a name="line-109"></a><span class='hs-comment'>------------------------------------------------------------------------------</span> -<a name="line-110"></a><span class='hs-comment'>-- $mtl</span> -<a name="line-111"></a><span class='hs-comment'>-- The mtl style typeclass</span> -<a name="line-112"></a><span class='hs-comment'>------------------------------------------------------------------------------</span> -<a name="line-113"></a> -<a name="line-114"></a><a name="MonadCatch"></a><span class='hs-keyword'>class</span> <span class='hs-conid'>Monad</span> <span class='hs-varid'>m</span> <span class='hs-keyglyph'>=></span> <span class='hs-conid'>MonadCatch</span> <span class='hs-varid'>m</span> <span class='hs-keyword'>where</span> -<a name="line-115"></a> <span class='hs-comment'>-- | Throw an exception. Note that this throws when this action is run in</span> -<a name="line-116"></a> <span class='hs-comment'>-- the monad @m@, not when it is applied. It is a generalization of</span> -<a name="line-117"></a> <span class='hs-comment'>-- "Control.Exception"'s 'ControlException.throwIO'.</span> -<a name="line-118"></a> <span class='hs-varid'>throwM</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Exception</span> <span class='hs-varid'>e</span> <span class='hs-keyglyph'>=></span> <span class='hs-varid'>e</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span> -<a name="line-119"></a> -<a name="line-120"></a> <span class='hs-comment'>-- | Provide a handler for exceptions thrown during execution of the first</span> -<a name="line-121"></a> <span class='hs-comment'>-- action. Note that type of the type of the argument to the handler will</span> -<a name="line-122"></a> <span class='hs-comment'>-- constrain which exceptions are caught. See "Control.Exception"'s</span> -<a name="line-123"></a> <span class='hs-comment'>-- 'ControlException.catch'.</span> -<a name="line-124"></a> <span class='hs-varid'>catch</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Exception</span> <span class='hs-varid'>e</span> <span class='hs-keyglyph'>=></span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-></span> <span class='hs-layout'>(</span><span class='hs-varid'>e</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span> -<a name="line-125"></a> -<a name="line-126"></a> <span class='hs-comment'>-- | Runs an action with asynchronous exceptions diabled. The action is</span> -<a name="line-127"></a> <span class='hs-comment'>-- provided a method for restoring the async. environment to what it was</span> -<a name="line-128"></a> <span class='hs-comment'>-- at the 'mask' call. See "Control.Exception"'s 'ControlException.mask'.</span> -<a name="line-129"></a> <span class='hs-varid'>mask</span> <span class='hs-keyglyph'>::</span> <span class='hs-layout'>(</span><span class='hs-layout'>(</span><span class='hs-keyword'>forall</span> <span class='hs-varid'>a</span><span class='hs-varop'>.</span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>m</span> <span class='hs-varid'>b</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>m</span> <span class='hs-varid'>b</span> -<a name="line-130"></a> -<a name="line-131"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>MonadCatch</span> <span class='hs-conid'>IO</span> <span class='hs-keyword'>where</span> -<a name="line-132"></a> <span class='hs-varid'>throwM</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>ControlException</span><span class='hs-varop'>.</span><span class='hs-varid'>throwIO</span> -<a name="line-133"></a> <span class='hs-varid'>catch</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>ControlException</span><span class='hs-varop'>.</span><span class='hs-varid'>catch</span> -<a name="line-134"></a> <span class='hs-varid'>mask</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>ControlException</span><span class='hs-varop'>.</span><span class='hs-varid'>mask</span> -<a name="line-135"></a> -<a name="line-136"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>MonadCatch</span> <span class='hs-varid'>m</span> <span class='hs-keyglyph'>=></span> <span class='hs-conid'>MonadCatch</span> <span class='hs-layout'>(</span><span class='hs-conid'>IdentityT</span> <span class='hs-varid'>m</span><span class='hs-layout'>)</span> <span class='hs-keyword'>where</span> -<a name="line-137"></a> <span class='hs-varid'>throwM</span> <span class='hs-varid'>e</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>lift</span> <span class='hs-varop'>$</span> <span class='hs-varid'>throwM</span> <span class='hs-varid'>e</span> -<a name="line-138"></a> <span class='hs-varid'>catch</span> <span class='hs-layout'>(</span><span class='hs-conid'>IdentityT</span> <span class='hs-varid'>m</span><span class='hs-layout'>)</span> <span class='hs-varid'>f</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>IdentityT</span> <span class='hs-layout'>(</span><span class='hs-varid'>catch</span> <span class='hs-varid'>m</span> <span class='hs-layout'>(</span><span class='hs-varid'>runIdentityT</span> <span class='hs-varop'>.</span> <span class='hs-varid'>f</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span> -<a name="line-139"></a> <span class='hs-varid'>mask</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>IdentityT</span> <span class='hs-varop'>$</span> <span class='hs-varid'>mask</span> <span class='hs-varop'>$</span> <span class='hs-keyglyph'>\</span><span class='hs-varid'>u</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>runIdentityT</span> <span class='hs-layout'>(</span><span class='hs-varid'>a</span> <span class='hs-varop'>$</span> <span class='hs-varid'>q</span> <span class='hs-varid'>u</span><span class='hs-layout'>)</span> -<a name="line-140"></a> <span class='hs-keyword'>where</span> <span class='hs-varid'>q</span> <span class='hs-varid'>u</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>IdentityT</span> <span class='hs-varop'>.</span> <span class='hs-varid'>u</span> <span class='hs-varop'>.</span> <span class='hs-varid'>runIdentityT</span> -<a name="line-141"></a> -<a name="line-142"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>MonadCatch</span> <span class='hs-varid'>m</span> <span class='hs-keyglyph'>=></span> <span class='hs-conid'>MonadCatch</span> <span class='hs-layout'>(</span><span class='hs-conid'>LazyS</span><span class='hs-varop'>.</span><span class='hs-conid'>StateT</span> <span class='hs-varid'>s</span> <span class='hs-varid'>m</span><span class='hs-layout'>)</span> <span class='hs-keyword'>where</span> -<a name="line-143"></a> <span class='hs-varid'>throwM</span> <span class='hs-varid'>e</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>lift</span> <span class='hs-varop'>$</span> <span class='hs-varid'>throwM</span> <span class='hs-varid'>e</span> -<a name="line-144"></a> <span class='hs-varid'>catch</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>LazyS</span><span class='hs-varop'>.</span><span class='hs-varid'>liftCatch</span> <span class='hs-varid'>catch</span> -<a name="line-145"></a> <span class='hs-varid'>mask</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>LazyS</span><span class='hs-varop'>.</span><span class='hs-conid'>StateT</span> <span class='hs-varop'>$</span> <span class='hs-keyglyph'>\</span><span class='hs-varid'>s</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>mask</span> <span class='hs-varop'>$</span> <span class='hs-keyglyph'>\</span><span class='hs-varid'>u</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>LazyS</span><span class='hs-varop'>.</span><span class='hs-varid'>runStateT</span> <span class='hs-layout'>(</span><span class='hs-varid'>a</span> <span class='hs-varop'>$</span> <span class='hs-varid'>q</span> <span class='hs-varid'>u</span><span class='hs-layout'>)</span> <span class='hs-varid'>s</span> -<a name="line-146"></a> <span class='hs-keyword'>where</span> <span class='hs-varid'>q</span> <span class='hs-varid'>u</span> <span class='hs-layout'>(</span><span class='hs-conid'>LazyS</span><span class='hs-varop'>.</span><span class='hs-conid'>StateT</span> <span class='hs-varid'>b</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>LazyS</span><span class='hs-varop'>.</span><span class='hs-conid'>StateT</span> <span class='hs-layout'>(</span><span class='hs-varid'>u</span> <span class='hs-varop'>.</span> <span class='hs-varid'>b</span><span class='hs-layout'>)</span> +<a name="line-10"></a><span class='hs-cpp'>#if defined(__GLASGOW_HASKELL__) && __GLASGOW_HASKELL__ >= 702</span> +<a name="line-11"></a><span class='hs-comment'>{-# LANGUAGE Trustworthy #-}</span> +<a name="line-12"></a><span class='hs-cpp'>#endif</span> +<a name="line-13"></a> +<a name="line-14"></a><span class='hs-cpp'>#ifndef MIN_VERSION_transformers</span> +<a name="line-15"></a><span class='hs-cpp'>#define MIN_VERSION_transformers(x,y,z) 1</span> +<a name="line-16"></a><span class='hs-cpp'>#endif</span> +<a name="line-17"></a> +<a name="line-18"></a><span class='hs-cpp'>#ifndef MIN_VERSION_mtl</span> +<a name="line-19"></a><span class='hs-cpp'>#define MIN_VERSION_mtl(x,y,z) 1</span> +<a name="line-20"></a><span class='hs-cpp'>#endif</span> +<a name="line-21"></a> +<a name="line-22"></a><span class='hs-comment'>{-# OPTIONS_GHC -fno-warn-deprecations #-}</span> +<a name="line-23"></a><span class='hs-comment'>--------------------------------------------------------------------</span> +<a name="line-24"></a><span class='hs-comment'>-- |</span> +<a name="line-25"></a><span class='hs-comment'>-- Copyright : (C) Edward Kmett 2013-2014, (c) Google Inc. 2012</span> +<a name="line-26"></a><span class='hs-comment'>-- License : BSD-style (see the file LICENSE)</span> +<a name="line-27"></a><span class='hs-comment'>-- Maintainer : Edward Kmett <ekmett@gmail.com></span> +<a name="line-28"></a><span class='hs-comment'>-- Stability : experimental</span> +<a name="line-29"></a><span class='hs-comment'>-- Portability : non-portable</span> +<a name="line-30"></a><span class='hs-comment'>--</span> +<a name="line-31"></a><span class='hs-comment'>-- This module supports monads that can throw extensible exceptions. The</span> +<a name="line-32"></a><span class='hs-comment'>-- exceptions are the very same from "Control.Exception", and the operations</span> +<a name="line-33"></a><span class='hs-comment'>-- offered very similar, but here they are not limited to 'IO'.</span> +<a name="line-34"></a><span class='hs-comment'>--</span> +<a name="line-35"></a><span class='hs-comment'>-- This code is in the style of both transformers and mtl, and is compatible</span> +<a name="line-36"></a><span class='hs-comment'>-- with them, though doesn't mimic the module structure or offer the complete</span> +<a name="line-37"></a><span class='hs-comment'>-- range of features in those packages.</span> +<a name="line-38"></a><span class='hs-comment'>--</span> +<a name="line-39"></a><span class='hs-comment'>-- This is very similar to 'ErrorT' and 'MonadError', but based on features of</span> +<a name="line-40"></a><span class='hs-comment'>-- "Control.Exception". In particular, it handles the complex case of</span> +<a name="line-41"></a><span class='hs-comment'>-- asynchronous exceptions by including 'mask' in the typeclass. Note that the</span> +<a name="line-42"></a><span class='hs-comment'>-- extensible extensions feature relies on the RankNTypes language extension.</span> +<a name="line-43"></a><span class='hs-comment'>--------------------------------------------------------------------</span> +<a name="line-44"></a> +<a name="line-45"></a><span class='hs-keyword'>module</span> <span class='hs-conid'>Control</span><span class='hs-varop'>.</span><span class='hs-conid'>Monad</span><span class='hs-varop'>.</span><span class='hs-conid'>Catch</span> <span class='hs-layout'>(</span> +<a name="line-46"></a> <span class='hs-comment'>-- * Typeclass</span> +<a name="line-47"></a> <span class='hs-comment'>-- $mtl</span> +<a name="line-48"></a> <span class='hs-conid'>MonadThrow</span><span class='hs-layout'>(</span><span class='hs-keyglyph'>..</span><span class='hs-layout'>)</span> +<a name="line-49"></a> <span class='hs-layout'>,</span> <span class='hs-conid'>MonadCatch</span><span class='hs-layout'>(</span><span class='hs-keyglyph'>..</span><span class='hs-layout'>)</span> +<a name="line-50"></a> <span class='hs-layout'>,</span> <span class='hs-conid'>MonadMask</span><span class='hs-layout'>(</span><span class='hs-keyglyph'>..</span><span class='hs-layout'>)</span> +<a name="line-51"></a> +<a name="line-52"></a> <span class='hs-comment'>-- * Utilities</span> +<a name="line-53"></a> <span class='hs-comment'>-- $utilities</span> +<a name="line-54"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>mask_</span> +<a name="line-55"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>uninterruptibleMask_</span> +<a name="line-56"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>catchAll</span> +<a name="line-57"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>catchIOError</span> +<a name="line-58"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>catchJust</span> +<a name="line-59"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>catchIf</span> +<a name="line-60"></a> <span class='hs-layout'>,</span> <span class='hs-conid'>Handler</span><span class='hs-layout'>(</span><span class='hs-keyglyph'>..</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span> <span class='hs-varid'>catches</span> +<a name="line-61"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>handle</span> +<a name="line-62"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>handleAll</span> +<a name="line-63"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>handleIOError</span> +<a name="line-64"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>handleJust</span> +<a name="line-65"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>handleIf</span> +<a name="line-66"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>try</span> +<a name="line-67"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>tryJust</span> +<a name="line-68"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>onException</span> +<a name="line-69"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>bracket</span> +<a name="line-70"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>bracket_</span> +<a name="line-71"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>finally</span> +<a name="line-72"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>bracketOnError</span> +<a name="line-73"></a> <span class='hs-comment'>-- * Re-exports from Control.Exception</span> +<a name="line-74"></a> <span class='hs-layout'>,</span> <span class='hs-conid'>Exception</span><span class='hs-layout'>(</span><span class='hs-keyglyph'>..</span><span class='hs-layout'>)</span> +<a name="line-75"></a> <span class='hs-layout'>,</span> <span class='hs-conid'>SomeException</span><span class='hs-layout'>(</span><span class='hs-keyglyph'>..</span><span class='hs-layout'>)</span> +<a name="line-76"></a> <span class='hs-layout'>)</span> <span class='hs-keyword'>where</span> +<a name="line-77"></a> +<a name="line-78"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Control</span><span class='hs-varop'>.</span><span class='hs-conid'>Exception</span> <span class='hs-layout'>(</span><span class='hs-conid'>Exception</span><span class='hs-layout'>(</span><span class='hs-keyglyph'>..</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span> <span class='hs-conid'>SomeException</span><span class='hs-layout'>(</span><span class='hs-keyglyph'>..</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span> +<a name="line-79"></a><span class='hs-keyword'>import</span> <span class='hs-keyword'>qualified</span> <span class='hs-conid'>Control</span><span class='hs-varop'>.</span><span class='hs-conid'>Exception</span> <span class='hs-keyword'>as</span> <span class='hs-conid'>ControlException</span> +<a name="line-80"></a><span class='hs-keyword'>import</span> <span class='hs-keyword'>qualified</span> <span class='hs-conid'>Control</span><span class='hs-varop'>.</span><span class='hs-conid'>Monad</span><span class='hs-varop'>.</span><span class='hs-conid'>STM</span> <span class='hs-keyword'>as</span> <span class='hs-conid'>STM</span> +<a name="line-81"></a><span class='hs-keyword'>import</span> <span class='hs-keyword'>qualified</span> <span class='hs-conid'>Control</span><span class='hs-varop'>.</span><span class='hs-conid'>Monad</span><span class='hs-varop'>.</span><span class='hs-conid'>Trans</span><span class='hs-varop'>.</span><span class='hs-conid'>RWS</span><span class='hs-varop'>.</span><span class='hs-conid'>Lazy</span> <span class='hs-keyword'>as</span> <span class='hs-conid'>LazyRWS</span> +<a name="line-82"></a><span class='hs-keyword'>import</span> <span class='hs-keyword'>qualified</span> <span class='hs-conid'>Control</span><span class='hs-varop'>.</span><span class='hs-conid'>Monad</span><span class='hs-varop'>.</span><span class='hs-conid'>Trans</span><span class='hs-varop'>.</span><span class='hs-conid'>RWS</span><span class='hs-varop'>.</span><span class='hs-conid'>Strict</span> <span class='hs-keyword'>as</span> <span class='hs-conid'>StrictRWS</span> +<a name="line-83"></a><span class='hs-keyword'>import</span> <span class='hs-keyword'>qualified</span> <span class='hs-conid'>Control</span><span class='hs-varop'>.</span><span class='hs-conid'>Monad</span><span class='hs-varop'>.</span><span class='hs-conid'>Trans</span><span class='hs-varop'>.</span><span class='hs-conid'>State</span><span class='hs-varop'>.</span><span class='hs-conid'>Lazy</span> <span class='hs-keyword'>as</span> <span class='hs-conid'>LazyS</span> +<a name="line-84"></a><span class='hs-keyword'>import</span> <span class='hs-keyword'>qualified</span> <span class='hs-conid'>Control</span><span class='hs-varop'>.</span><span class='hs-conid'>Monad</span><span class='hs-varop'>.</span><span class='hs-conid'>Trans</span><span class='hs-varop'>.</span><span class='hs-conid'>State</span><span class='hs-varop'>.</span><span class='hs-conid'>Strict</span> <span class='hs-keyword'>as</span> <span class='hs-conid'>StrictS</span> +<a name="line-85"></a><span class='hs-keyword'>import</span> <span class='hs-keyword'>qualified</span> <span class='hs-conid'>Control</span><span class='hs-varop'>.</span><span class='hs-conid'>Monad</span><span class='hs-varop'>.</span><span class='hs-conid'>Trans</span><span class='hs-varop'>.</span><span class='hs-conid'>Writer</span><span class='hs-varop'>.</span><span class='hs-conid'>Lazy</span> <span class='hs-keyword'>as</span> <span class='hs-conid'>LazyW</span> +<a name="line-86"></a><span class='hs-keyword'>import</span> <span class='hs-keyword'>qualified</span> <span class='hs-conid'>Control</span><span class='hs-varop'>.</span><span class='hs-conid'>Monad</span><span class='hs-varop'>.</span><span class='hs-conid'>Trans</span><span class='hs-varop'>.</span><span class='hs-conid'>Writer</span><span class='hs-varop'>.</span><span class='hs-conid'>Strict</span> <span class='hs-keyword'>as</span> <span class='hs-conid'>StrictW</span> +<a name="line-87"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Control</span><span class='hs-varop'>.</span><span class='hs-conid'>Monad</span><span class='hs-varop'>.</span><span class='hs-conid'>STM</span> <span class='hs-layout'>(</span><span class='hs-conid'>STM</span><span class='hs-layout'>)</span> +<a name="line-88"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Control</span><span class='hs-varop'>.</span><span class='hs-conid'>Monad</span><span class='hs-varop'>.</span><span class='hs-conid'>Trans</span><span class='hs-varop'>.</span><span class='hs-conid'>List</span> <span class='hs-layout'>(</span><span class='hs-conid'>ListT</span><span class='hs-layout'>(</span><span class='hs-keyglyph'>..</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span> <span class='hs-varid'>runListT</span><span class='hs-layout'>)</span> +<a name="line-89"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Control</span><span class='hs-varop'>.</span><span class='hs-conid'>Monad</span><span class='hs-varop'>.</span><span class='hs-conid'>Trans</span><span class='hs-varop'>.</span><span class='hs-conid'>Maybe</span> <span class='hs-layout'>(</span><span class='hs-conid'>MaybeT</span><span class='hs-layout'>(</span><span class='hs-keyglyph'>..</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span> <span class='hs-varid'>runMaybeT</span><span class='hs-layout'>)</span> +<a name="line-90"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Control</span><span class='hs-varop'>.</span><span class='hs-conid'>Monad</span><span class='hs-varop'>.</span><span class='hs-conid'>Trans</span><span class='hs-varop'>.</span><span class='hs-conid'>Error</span> <span class='hs-layout'>(</span><span class='hs-conid'>ErrorT</span><span class='hs-layout'>(</span><span class='hs-keyglyph'>..</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span> <span class='hs-conid'>Error</span><span class='hs-layout'>,</span> <span class='hs-varid'>runErrorT</span><span class='hs-layout'>)</span> +<a name="line-91"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Control</span><span class='hs-varop'>.</span><span class='hs-conid'>Monad</span><span class='hs-varop'>.</span><span class='hs-conid'>Trans</span><span class='hs-varop'>.</span><span class='hs-conid'>Except</span> <span class='hs-layout'>(</span><span class='hs-conid'>ExceptT</span><span class='hs-layout'>(</span><span class='hs-keyglyph'>..</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span> <span class='hs-varid'>runExceptT</span><span class='hs-layout'>)</span> +<a name="line-92"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Control</span><span class='hs-varop'>.</span><span class='hs-conid'>Monad</span><span class='hs-varop'>.</span><span class='hs-conid'>Trans</span><span class='hs-varop'>.</span><span class='hs-conid'>Cont</span> <span class='hs-layout'>(</span><span class='hs-conid'>ContT</span><span class='hs-layout'>)</span> +<a name="line-93"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Control</span><span class='hs-varop'>.</span><span class='hs-conid'>Monad</span><span class='hs-varop'>.</span><span class='hs-conid'>Trans</span><span class='hs-varop'>.</span><span class='hs-conid'>Identity</span> +<a name="line-94"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Control</span><span class='hs-varop'>.</span><span class='hs-conid'>Monad</span><span class='hs-varop'>.</span><span class='hs-conid'>Reader</span> <span class='hs-keyword'>as</span> <span class='hs-conid'>Reader</span> +<a name="line-95"></a> +<a name="line-96"></a><span class='hs-cpp'>#if __GLASGOW_HASKELL__ < 706</span> +<a name="line-97"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Prelude</span> <span class='hs-varid'>hiding</span> <span class='hs-layout'>(</span><span class='hs-varid'>catch</span><span class='hs-layout'>,</span> <span class='hs-varid'>foldr</span><span class='hs-layout'>)</span> +<a name="line-98"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Data</span><span class='hs-varop'>.</span><span class='hs-conid'>Monoid</span> +<a name="line-99"></a><span class='hs-cpp'>#elif __GLASGOW_HASKELL__ < 710</span> +<a name="line-100"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Prelude</span> <span class='hs-varid'>hiding</span> <span class='hs-layout'>(</span><span class='hs-varid'>foldr</span><span class='hs-layout'>)</span> +<a name="line-101"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Data</span><span class='hs-varop'>.</span><span class='hs-conid'>Foldable</span> +<a name="line-102"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Data</span><span class='hs-varop'>.</span><span class='hs-conid'>Monoid</span> +<a name="line-103"></a><span class='hs-cpp'>#endif</span> +<a name="line-104"></a> +<a name="line-105"></a><span class='hs-comment'>------------------------------------------------------------------------------</span> +<a name="line-106"></a><span class='hs-comment'>-- $mtl</span> +<a name="line-107"></a><span class='hs-comment'>-- The mtl style typeclass</span> +<a name="line-108"></a><span class='hs-comment'>------------------------------------------------------------------------------</span> +<a name="line-109"></a> +<a name="line-110"></a><a name="MonadThrow"></a><span class='hs-comment'>-- | A class for monads in which exceptions may be thrown.</span> +<a name="line-111"></a><a name="MonadThrow"></a><span class='hs-comment'>--</span> +<a name="line-112"></a><a name="MonadThrow"></a><span class='hs-comment'>-- Instances should obey the following law:</span> +<a name="line-113"></a><a name="MonadThrow"></a><span class='hs-comment'>--</span> +<a name="line-114"></a><a name="MonadThrow"></a><span class='hs-comment'>-- > throwM e >> x = throwM e</span> +<a name="line-115"></a><a name="MonadThrow"></a><span class='hs-comment'>--</span> +<a name="line-116"></a><a name="MonadThrow"></a><span class='hs-comment'>-- In other words, throwing an exception short-circuits the rest of the monadic</span> +<a name="line-117"></a><a name="MonadThrow"></a><span class='hs-comment'>-- computation.</span> +<a name="line-118"></a><a name="MonadThrow"></a><span class='hs-keyword'>class</span> <span class='hs-conid'>Monad</span> <span class='hs-varid'>m</span> <span class='hs-keyglyph'>=></span> <span class='hs-conid'>MonadThrow</span> <span class='hs-varid'>m</span> <span class='hs-keyword'>where</span> +<a name="line-119"></a> <span class='hs-comment'>-- | Throw an exception. Note that this throws when this action is run in</span> +<a name="line-120"></a> <span class='hs-comment'>-- the monad @m@, not when it is applied. It is a generalization of</span> +<a name="line-121"></a> <span class='hs-comment'>-- "Control.Exception"'s 'ControlException.throwIO'.</span> +<a name="line-122"></a> <span class='hs-comment'>--</span> +<a name="line-123"></a> <span class='hs-comment'>-- Should satisfy the law:</span> +<a name="line-124"></a> <span class='hs-comment'>--</span> +<a name="line-125"></a> <span class='hs-comment'>-- > throwM e >> f = throwM e</span> +<a name="line-126"></a> <span class='hs-varid'>throwM</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Exception</span> <span class='hs-varid'>e</span> <span class='hs-keyglyph'>=></span> <span class='hs-varid'>e</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span> +<a name="line-127"></a> +<a name="line-128"></a><a name="MonadCatch"></a><span class='hs-comment'>-- | A class for monads which allow exceptions to be caught, in particular</span> +<a name="line-129"></a><a name="MonadCatch"></a><span class='hs-comment'>-- exceptions which were thrown by 'throwM'.</span> +<a name="line-130"></a><a name="MonadCatch"></a><span class='hs-comment'>--</span> +<a name="line-131"></a><a name="MonadCatch"></a><span class='hs-comment'>-- Instances should obey the following law:</span> +<a name="line-132"></a><a name="MonadCatch"></a><span class='hs-comment'>--</span> +<a name="line-133"></a><a name="MonadCatch"></a><span class='hs-comment'>-- > catch (throwM e) f = f e</span> +<a name="line-134"></a><a name="MonadCatch"></a><span class='hs-comment'>--</span> +<a name="line-135"></a><a name="MonadCatch"></a><span class='hs-comment'>-- Note that the ability to catch an exception does /not/ guarantee that we can</span> +<a name="line-136"></a><a name="MonadCatch"></a><span class='hs-comment'>-- deal with all possible exit points from a computation. Some monads, such as</span> +<a name="line-137"></a><a name="MonadCatch"></a><span class='hs-comment'>-- continuation-based stacks, allow for more than just a success/failure</span> +<a name="line-138"></a><a name="MonadCatch"></a><span class='hs-comment'>-- strategy, and therefore @catch@ /cannot/ be used by those monads to properly</span> +<a name="line-139"></a><a name="MonadCatch"></a><span class='hs-comment'>-- implement a function such as @finally@. For more information, see</span> +<a name="line-140"></a><a name="MonadCatch"></a><span class='hs-comment'>-- 'MonadMask'.</span> +<a name="line-141"></a><a name="MonadCatch"></a><span class='hs-keyword'>class</span> <span class='hs-conid'>MonadThrow</span> <span class='hs-varid'>m</span> <span class='hs-keyglyph'>=></span> <span class='hs-conid'>MonadCatch</span> <span class='hs-varid'>m</span> <span class='hs-keyword'>where</span> +<a name="line-142"></a> <span class='hs-comment'>-- | Provide a handler for exceptions thrown during execution of the first</span> +<a name="line-143"></a> <span class='hs-comment'>-- action. Note that type of the type of the argument to the handler will</span> +<a name="line-144"></a> <span class='hs-comment'>-- constrain which exceptions are caught. See "Control.Exception"'s</span> +<a name="line-145"></a> <span class='hs-comment'>-- 'ControlException.catch'.</span> +<a name="line-146"></a> <span class='hs-varid'>catch</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Exception</span> <span class='hs-varid'>e</span> <span class='hs-keyglyph'>=></span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-></span> <span class='hs-layout'>(</span><span class='hs-varid'>e</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span> <a name="line-147"></a> -<a name="line-148"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>MonadCatch</span> <span class='hs-varid'>m</span> <span class='hs-keyglyph'>=></span> <span class='hs-conid'>MonadCatch</span> <span class='hs-layout'>(</span><span class='hs-conid'>StrictS</span><span class='hs-varop'>.</span><span class='hs-conid'>StateT</span> <span class='hs-varid'>s</span> <span class='hs-varid'>m</span><span class='hs-layout'>)</span> <span class='hs-keyword'>where</span> -<a name="line-149"></a> <span class='hs-varid'>throwM</span> <span class='hs-varid'>e</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>lift</span> <span class='hs-varop'>$</span> <span class='hs-varid'>throwM</span> <span class='hs-varid'>e</span> -<a name="line-150"></a> <span class='hs-varid'>catch</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>StrictS</span><span class='hs-varop'>.</span><span class='hs-varid'>liftCatch</span> <span class='hs-varid'>catch</span> -<a name="line-151"></a> <span class='hs-varid'>mask</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>StrictS</span><span class='hs-varop'>.</span><span class='hs-conid'>StateT</span> <span class='hs-varop'>$</span> <span class='hs-keyglyph'>\</span><span class='hs-varid'>s</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>mask</span> <span class='hs-varop'>$</span> <span class='hs-keyglyph'>\</span><span class='hs-varid'>u</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>StrictS</span><span class='hs-varop'>.</span><span class='hs-varid'>runStateT</span> <span class='hs-layout'>(</span><span class='hs-varid'>a</span> <span class='hs-varop'>$</span> <span class='hs-varid'>q</span> <span class='hs-varid'>u</span><span class='hs-layout'>)</span> <span class='hs-varid'>s</span> -<a name="line-152"></a> <span class='hs-keyword'>where</span> <span class='hs-varid'>q</span> <span class='hs-varid'>u</span> <span class='hs-layout'>(</span><span class='hs-conid'>StrictS</span><span class='hs-varop'>.</span><span class='hs-conid'>StateT</span> <span class='hs-varid'>b</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>StrictS</span><span class='hs-varop'>.</span><span class='hs-conid'>StateT</span> <span class='hs-layout'>(</span><span class='hs-varid'>u</span> <span class='hs-varop'>.</span> <span class='hs-varid'>b</span><span class='hs-layout'>)</span> -<a name="line-153"></a> -<a name="line-154"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>MonadCatch</span> <span class='hs-varid'>m</span> <span class='hs-keyglyph'>=></span> <span class='hs-conid'>MonadCatch</span> <span class='hs-layout'>(</span><span class='hs-conid'>ReaderT</span> <span class='hs-varid'>r</span> <span class='hs-varid'>m</span><span class='hs-layout'>)</span> <span class='hs-keyword'>where</span> -<a name="line-155"></a> <span class='hs-varid'>throwM</span> <span class='hs-varid'>e</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>lift</span> <span class='hs-varop'>$</span> <span class='hs-varid'>throwM</span> <span class='hs-varid'>e</span> -<a name="line-156"></a> <span class='hs-varid'>catch</span> <span class='hs-layout'>(</span><span class='hs-conid'>ReaderT</span> <span class='hs-varid'>m</span><span class='hs-layout'>)</span> <span class='hs-varid'>c</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>ReaderT</span> <span class='hs-varop'>$</span> <span class='hs-keyglyph'>\</span><span class='hs-varid'>r</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>m</span> <span class='hs-varid'>r</span> <span class='hs-varop'>`catch`</span> <span class='hs-keyglyph'>\</span><span class='hs-varid'>e</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>runReaderT</span> <span class='hs-layout'>(</span><span class='hs-varid'>c</span> <span class='hs-varid'>e</span><span class='hs-layout'>)</span> <span class='hs-varid'>r</span> -<a name="line-157"></a> <span class='hs-varid'>mask</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>ReaderT</span> <span class='hs-varop'>$</span> <span class='hs-keyglyph'>\</span><span class='hs-varid'>e</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>mask</span> <span class='hs-varop'>$</span> <span class='hs-keyglyph'>\</span><span class='hs-varid'>u</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>Reader</span><span class='hs-varop'>.</span><span class='hs-varid'>runReaderT</span> <span class='hs-layout'>(</span><span class='hs-varid'>a</span> <span class='hs-varop'>$</span> <span class='hs-varid'>q</span> <span class='hs-varid'>u</span><span class='hs-layout'>)</span> <span class='hs-varid'>e</span> -<a name="line-158"></a> <span class='hs-keyword'>where</span> <span class='hs-varid'>q</span> <span class='hs-varid'>u</span> <span class='hs-layout'>(</span><span class='hs-conid'>ReaderT</span> <span class='hs-varid'>b</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>ReaderT</span> <span class='hs-layout'>(</span><span class='hs-varid'>u</span> <span class='hs-varop'>.</span> <span class='hs-varid'>b</span><span class='hs-layout'>)</span> -<a name="line-159"></a> -<a name="line-160"></a><span class='hs-keyword'>instance</span> <span class='hs-layout'>(</span><span class='hs-conid'>MonadCatch</span> <span class='hs-varid'>m</span><span class='hs-layout'>,</span> <span class='hs-conid'>Monoid</span> <span class='hs-varid'>w</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=></span> <span class='hs-conid'>MonadCatch</span> <span class='hs-layout'>(</span><span class='hs-conid'>StrictW</span><span class='hs-varop'>.</span><span class='hs-conid'>WriterT</span> <span class='hs-varid'>w</span> <span class='hs-varid'>m</span><span class='hs-layout'>)</span> <span class='hs-keyword'>where</span> -<a name="line-161"></a> <span class='hs-varid'>throwM</span> <span class='hs-varid'>e</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>lift</span> <span class='hs-varop'>$</span> <span class='hs-varid'>throwM</span> <span class='hs-varid'>e</span> -<a name="line-162"></a> <span class='hs-varid'>catch</span> <span class='hs-layout'>(</span><span class='hs-conid'>StrictW</span><span class='hs-varop'>.</span><span class='hs-conid'>WriterT</span> <span class='hs-varid'>m</span><span class='hs-layout'>)</span> <span class='hs-varid'>h</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>StrictW</span><span class='hs-varop'>.</span><span class='hs-conid'>WriterT</span> <span class='hs-varop'>$</span> <span class='hs-varid'>m</span> <span class='hs-varop'>`</span><span class='hs-varid'>catch</span> <span class='hs-varop'>`</span> <span class='hs-keyglyph'>\</span><span class='hs-varid'>e</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>StrictW</span><span class='hs-varop'>.</span><span class='hs-varid'>runWriterT</span> <span class='hs-layout'>(</span><span class='hs-varid'>h</span> <span class='hs-varid'>e</span><span class='hs-layout'>)</span> -<a name="line-163"></a> <span class='hs-varid'>mask</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>StrictW</span><span class='hs-varop'>.</span><span class='hs-conid'>WriterT</span> <span class='hs-varop'>$</span> <span class='hs-varid'>mask</span> <span class='hs-varop'>$</span> <span class='hs-keyglyph'>\</span><span class='hs-varid'>u</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>StrictW</span><span class='hs-varop'>.</span><span class='hs-varid'>runWriterT</span> <span class='hs-layout'>(</span><span class='hs-varid'>a</span> <span class='hs-varop'>$</span> <span class='hs-varid'>q</span> <span class='hs-varid'>u</span><span class='hs-layout'>)</span> -<a name="line-164"></a> <span class='hs-keyword'>where</span> <span class='hs-varid'>q</span> <span class='hs-varid'>u</span> <span class='hs-varid'>b</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>StrictW</span><span class='hs-varop'>.</span><span class='hs-conid'>WriterT</span> <span class='hs-varop'>$</span> <span class='hs-varid'>u</span> <span class='hs-layout'>(</span><span class='hs-conid'>StrictW</span><span class='hs-varop'>.</span><span class='hs-varid'>runWriterT</span> <span class='hs-varid'>b</span><span class='hs-layout'>)</span> -<a name="line-165"></a> -<a name="line-166"></a><span class='hs-keyword'>instance</span> <span class='hs-layout'>(</span><span class='hs-conid'>MonadCatch</span> <span class='hs-varid'>m</span><span class='hs-layout'>,</span> <span class='hs-conid'>Monoid</span> <span class='hs-varid'>w</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=></span> <span class='hs-conid'>MonadCatch</span> <span class='hs-layout'>(</span><span class='hs-conid'>LazyW</span><span class='hs-varop'>.</span><span class='hs-conid'>WriterT</span> <span class='hs-varid'>w</span> <span class='hs-varid'>m</span><span class='hs-layout'>)</span> <span class='hs-keyword'>where</span> -<a name="line-167"></a> <span class='hs-varid'>throwM</span> <span class='hs-varid'>e</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>lift</span> <span class='hs-varop'>$</span> <span class='hs-varid'>throwM</span> <span class='hs-varid'>e</span> -<a name="line-168"></a> <span class='hs-varid'>catch</span> <span class='hs-layout'>(</span><span class='hs-conid'>LazyW</span><span class='hs-varop'>.</span><span class='hs-conid'>WriterT</span> <span class='hs-varid'>m</span><span class='hs-layout'>)</span> <span class='hs-varid'>h</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>LazyW</span><span class='hs-varop'>.</span><span class='hs-conid'>WriterT</span> <span class='hs-varop'>$</span> <span class='hs-varid'>m</span> <span class='hs-varop'>`</span><span class='hs-varid'>catch</span> <span class='hs-varop'>`</span> <span class='hs-keyglyph'>\</span><span class='hs-varid'>e</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>LazyW</span><span class='hs-varop'>.</span><span class='hs-varid'>runWriterT</span> <span class='hs-layout'>(</span><span class='hs-varid'>h</span> <span class='hs-varid'>e</span><span class='hs-layout'>)</span> -<a name="line-169"></a> <span class='hs-varid'>mask</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>LazyW</span><span class='hs-varop'>.</span><span class='hs-conid'>WriterT</span> <span class='hs-varop'>$</span> <span class='hs-varid'>mask</span> <span class='hs-varop'>$</span> <span class='hs-keyglyph'>\</span><span class='hs-varid'>u</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>LazyW</span><span class='hs-varop'>.</span><span class='hs-varid'>runWriterT</span> <span class='hs-layout'>(</span><span class='hs-varid'>a</span> <span class='hs-varop'>$</span> <span class='hs-varid'>q</span> <span class='hs-varid'>u</span><span class='hs-layout'>)</span> -<a name="line-170"></a> <span class='hs-keyword'>where</span> <span class='hs-varid'>q</span> <span class='hs-varid'>u</span> <span class='hs-varid'>b</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>LazyW</span><span class='hs-varop'>.</span><span class='hs-conid'>WriterT</span> <span class='hs-varop'>$</span> <span class='hs-varid'>u</span> <span class='hs-layout'>(</span><span class='hs-conid'>LazyW</span><span class='hs-varop'>.</span><span class='hs-varid'>runWriterT</span> <span class='hs-varid'>b</span><span class='hs-layout'>)</span> -<a name="line-171"></a> -<a name="line-172"></a><span class='hs-keyword'>instance</span> <span class='hs-layout'>(</span><span class='hs-conid'>MonadCatch</span> <span class='hs-varid'>m</span><span class='hs-layout'>,</span> <span class='hs-conid'>Monoid</span> <span class='hs-varid'>w</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=></span> <span class='hs-conid'>MonadCatch</span> <span class='hs-layout'>(</span><span class='hs-conid'>LazyRWS</span><span class='hs-varop'>.</span><span class='hs-conid'>RWST</span> <span class='hs-varid'>r</span> <span class='hs-varid'>w</span> <span class='hs-varid'>s</span> <span class='hs-varid'>m</span><span class='hs-layout'>)</span> <span class='hs-keyword'>where</span> -<a name="line-173"></a> <span class='hs-varid'>throwM</span> <span class='hs-varid'>e</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>lift</span> <span class='hs-varop'>$</span> <span class='hs-varid'>throwM</span> <span class='hs-varid'>e</span> -<a name="line-174"></a> <span class='hs-varid'>catch</span> <span class='hs-layout'>(</span><span class='hs-conid'>LazyRWS</span><span class='hs-varop'>.</span><span class='hs-conid'>RWST</span> <span class='hs-varid'>m</span><span class='hs-layout'>)</span> <span class='hs-varid'>h</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>LazyRWS</span><span class='hs-varop'>.</span><span class='hs-conid'>RWST</span> <span class='hs-varop'>$</span> <span class='hs-keyglyph'>\</span><span class='hs-varid'>r</span> <span class='hs-varid'>s</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>m</span> <span class='hs-varid'>r</span> <span class='hs-varid'>s</span> <span class='hs-varop'>`catch`</span> <span class='hs-keyglyph'>\</span><span class='hs-varid'>e</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>LazyRWS</span><span class='hs-varop'>.</span><span class='hs-varid'>runRWST</span> <span class='hs-layout'>(</span><span class='hs-varid'>h</span> <span class='hs-varid'>e</span><span class='hs-layout'>)</span> <span class='hs-varid'>r</span> <span class='hs-varid'>s</span> -<a name="line-175"></a> <span class='hs-varid'>mask</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>LazyRWS</span><span class='hs-varop'>.</span><span class='hs-conid'>RWST</span> <span class='hs-varop'>$</span> <span class='hs-keyglyph'>\</span><span class='hs-varid'>r</span> <span class='hs-varid'>s</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>mask</span> <span class='hs-varop'>$</span> <span class='hs-keyglyph'>\</span><span class='hs-varid'>u</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>LazyRWS</span><span class='hs-varop'>.</span><span class='hs-varid'>runRWST</span> <span class='hs-layout'>(</span><span class='hs-varid'>a</span> <span class='hs-varop'>$</span> <span class='hs-varid'>q</span> <span class='hs-varid'>u</span><span class='hs-layout'>)</span> <span class='hs-varid'>r</span> <span class='hs-varid'>s</span> -<a name="line-176"></a> <span class='hs-keyword'>where</span> <span class='hs-varid'>q</span> <span class='hs-varid'>u</span> <span class='hs-layout'>(</span><span class='hs-conid'>LazyRWS</span><span class='hs-varop'>.</span><span class='hs-conid'>RWST</span> <span class='hs-varid'>b</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>LazyRWS</span><span class='hs-varop'>.</span><span class='hs-conid'>RWST</span> <span class='hs-varop'>$</span> <span class='hs-keyglyph'>\</span> <span class='hs-varid'>r</span> <span class='hs-varid'>s</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>u</span> <span class='hs-layout'>(</span><span class='hs-varid'>b</span> <span class='hs-varid'>r</span> <span class='hs-varid'>s</span><span class='hs-layout'>)</span> -<a name="line-177"></a> -<a name="line-178"></a><span class='hs-keyword'>instance</span> <span class='hs-layout'>(</span><span class='hs-conid'>MonadCatch</span> <span class='hs-varid'>m</span><span class='hs-layout'>,</span> <span class='hs-conid'>Monoid</span> <span class='hs-varid'>w</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=></span> <span class='hs-conid'>MonadCatch</span> <span class='hs-layout'>(</span><span class='hs-conid'>StrictRWS</span><span class='hs-varop'>.</span><span class='hs-conid'>RWST</span> <span class='hs-varid'>r</span> <span class='hs-varid'>w</span> <span class='hs-varid'>s</span> <span class='hs-varid'>m</span><span class='hs-layout'>)</span> <span class='hs-keyword'>where</span> -<a name="line-179"></a> <span class='hs-varid'>throwM</span> <span class='hs-varid'>e</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>lift</span> <span class='hs-varop'>$</span> <span class='hs-varid'>throwM</span> <span class='hs-varid'>e</span> -<a name="line-180"></a> <span class='hs-varid'>catch</span> <span class='hs-layout'>(</span><span class='hs-conid'>StrictRWS</span><span class='hs-varop'>.</span><span class='hs-conid'>RWST</span> <span class='hs-varid'>m</span><span class='hs-layout'>)</span> <span class='hs-varid'>h</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>StrictRWS</span><span class='hs-varop'>.</span><span class='hs-conid'>RWST</span> <span class='hs-varop'>$</span> <span class='hs-keyglyph'>\</span><span class='hs-varid'>r</span> <span class='hs-varid'>s</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>m</span> <span class='hs-varid'>r</span> <span class='hs-varid'>s</span> <span class='hs-varop'>`catch`</span> <span class='hs-keyglyph'>\</span><span class='hs-varid'>e</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>StrictRWS</span><span class='hs-varop'>.</span><span class='hs-varid'>runRWST</span> <span class='hs-layout'>(</span><span class='hs-varid'>h</span> <span class='hs-varid'>e</span><span class='hs-layout'>)</span> <span class='hs-varid'>r</span> <span class='hs-varid'>s</span> -<a name="line-181"></a> <span class='hs-varid'>mask</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>StrictRWS</span><span class='hs-varop'>.</span><span class='hs-conid'>RWST</span> <span class='hs-varop'>$</span> <span class='hs-keyglyph'>\</span><span class='hs-varid'>r</span> <span class='hs-varid'>s</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>mask</span> <span class='hs-varop'>$</span> <span class='hs-keyglyph'>\</span><span class='hs-varid'>u</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>StrictRWS</span><span class='hs-varop'>.</span><span class='hs-varid'>runRWST</span> <span class='hs-layout'>(</span><span class='hs-varid'>a</span> <span class='hs-varop'>$</span> <span class='hs-varid'>q</span> <span class='hs-varid'>u</span><span class='hs-layout'>)</span> <span class='hs-varid'>r</span> <span class='hs-varid'>s</span> -<a name="line-182"></a> <span class='hs-keyword'>where</span> <span class='hs-varid'>q</span> <span class='hs-varid'>u</span> <span class='hs-layout'>(</span><span class='hs-conid'>StrictRWS</span><span class='hs-varop'>.</span><span class='hs-conid'>RWST</span> <span class='hs-varid'>b</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>StrictRWS</span><span class='hs-varop'>.</span><span class='hs-conid'>RWST</span> <span class='hs-varop'>$</span> <span class='hs-keyglyph'>\</span> <span class='hs-varid'>r</span> <span class='hs-varid'>s</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>u</span> <span class='hs-layout'>(</span><span class='hs-varid'>b</span> <span class='hs-varid'>r</span> <span class='hs-varid'>s</span><span class='hs-layout'>)</span> -<a name="line-183"></a> -<a name="line-184"></a><span class='hs-comment'>------------------------------------------------------------------------------</span> -<a name="line-185"></a><span class='hs-comment'>-- $transformer</span> -<a name="line-186"></a><span class='hs-comment'>-- The @transformers@-style monad transfomer</span> -<a name="line-187"></a><span class='hs-comment'>------------------------------------------------------------------------------</span> -<a name="line-188"></a> -<a name="line-189"></a><a name="CatchT"></a><span class='hs-comment'>-- | Add 'Exception' handling abilities to a 'Monad'.</span> -<a name="line-190"></a><a name="CatchT"></a><span class='hs-keyword'>newtype</span> <span class='hs-conid'>CatchT</span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>CatchT</span> <span class='hs-layout'>{</span> <span class='hs-varid'>runCatchT</span> <span class='hs-keyglyph'>::</span> <span class='hs-varid'>m</span> <span class='hs-layout'>(</span><span class='hs-conid'>Either</span> <span class='hs-conid'>SomeException</span> <span class='hs-varid'>a</span><span class='hs-layout'>)</span> <span class='hs-layout'>}</span> -<a name="line-191"></a> -<a name="line-192"></a><a name="Catch"></a><span class='hs-keyword'>type</span> <span class='hs-conid'>Catch</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>CatchT</span> <span class='hs-conid'>Identity</span> +<a name="line-148"></a><a name="MonadMask"></a><span class='hs-comment'>-- | A class for monads which provide for the ability to account for all</span> +<a name="line-149"></a><a name="MonadMask"></a><span class='hs-comment'>-- possible exit points from a computation, and to mask asynchronous</span> +<a name="line-150"></a><a name="MonadMask"></a><span class='hs-comment'>-- exceptions. Continuation-based monads, and stacks such as @ErrorT e IO@</span> +<a name="line-151"></a><a name="MonadMask"></a><span class='hs-comment'>-- which provide for multiple failure modes, are invalid instances of this</span> +<a name="line-152"></a><a name="MonadMask"></a><span class='hs-comment'>-- class.</span> +<a name="line-153"></a><a name="MonadMask"></a><span class='hs-comment'>--</span> +<a name="line-154"></a><a name="MonadMask"></a><span class='hs-comment'>-- Note that this package /does/ provide a @MonadMask@ instance for @CatchT@.</span> +<a name="line-155"></a><a name="MonadMask"></a><span class='hs-comment'>-- This instance is /only/ valid if the base monad provides no ability to</span> +<a name="line-156"></a><a name="MonadMask"></a><span class='hs-comment'>-- provide multiple exit. For example, @IO@ or @Either@ would be invalid base</span> +<a name="line-157"></a><a name="MonadMask"></a><span class='hs-comment'>-- monads, but @Reader@ or @State@ would be acceptable.</span> +<a name="line-158"></a><a name="MonadMask"></a><span class='hs-comment'>--</span> +<a name="line-159"></a><a name="MonadMask"></a><span class='hs-comment'>-- Instances should ensure that, in the following code:</span> +<a name="line-160"></a><a name="MonadMask"></a><span class='hs-comment'>--</span> +<a name="line-161"></a><a name="MonadMask"></a><span class='hs-comment'>-- > f `finally` g</span> +<a name="line-162"></a><a name="MonadMask"></a><span class='hs-comment'>--</span> +<a name="line-163"></a><a name="MonadMask"></a><span class='hs-comment'>-- The action @g@ is called regardless of what occurs within @f@, including</span> +<a name="line-164"></a><a name="MonadMask"></a><span class='hs-comment'>-- async exceptions.</span> +<a name="line-165"></a><a name="MonadMask"></a><span class='hs-keyword'>class</span> <span class='hs-conid'>MonadCatch</span> <span class='hs-varid'>m</span> <span class='hs-keyglyph'>=></span> <span class='hs-conid'>MonadMask</span> <span class='hs-varid'>m</span> <span class='hs-keyword'>where</span> +<a name="line-166"></a> <span class='hs-comment'>-- | Runs an action with asynchronous exceptions disabled. The action is</span> +<a name="line-167"></a> <span class='hs-comment'>-- provided a method for restoring the async. environment to what it was</span> +<a name="line-168"></a> <span class='hs-comment'>-- at the 'mask' call. See "Control.Exception"'s 'ControlException.mask'.</span> +<a name="line-169"></a> <span class='hs-varid'>mask</span> <span class='hs-keyglyph'>::</span> <span class='hs-layout'>(</span><span class='hs-layout'>(</span><span class='hs-keyword'>forall</span> <span class='hs-varid'>a</span><span class='hs-varop'>.</span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>m</span> <span class='hs-varid'>b</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>m</span> <span class='hs-varid'>b</span> +<a name="line-170"></a> +<a name="line-171"></a> <span class='hs-comment'>-- | Like 'mask', but the masked computation is not interruptible (see</span> +<a name="line-172"></a> <span class='hs-comment'>-- "Control.Exception"'s 'ControlException.uninterruptibleMask'. WARNING:</span> +<a name="line-173"></a> <span class='hs-comment'>-- Only use if you need to mask exceptions around an interruptible operation</span> +<a name="line-174"></a> <span class='hs-comment'>-- AND you can guarantee the interruptible operation will only block for a</span> +<a name="line-175"></a> <span class='hs-comment'>-- short period of time. Otherwise you render the program/thread unresponsive</span> +<a name="line-176"></a> <span class='hs-comment'>-- and/or unkillable.</span> +<a name="line-177"></a> <span class='hs-varid'>uninterruptibleMask</span> <span class='hs-keyglyph'>::</span> <span class='hs-layout'>(</span><span class='hs-layout'>(</span><span class='hs-keyword'>forall</span> <span class='hs-varid'>a</span><span class='hs-varop'>.</span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>m</span> <span class='hs-varid'>b</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>m</span> <span class='hs-varid'>b</span> +<a name="line-178"></a> +<a name="line-179"></a><a name="instance%20MonadThrow%20%5b%5d"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>MonadThrow</span> <span class='hs-conid'>[]</span> <span class='hs-keyword'>where</span> +<a name="line-180"></a> <span class='hs-varid'>throwM</span> <span class='hs-keyword'>_</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>[]</span> +<a name="line-181"></a><a name="instance%20MonadThrow%20Maybe"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>MonadThrow</span> <span class='hs-conid'>Maybe</span> <span class='hs-keyword'>where</span> +<a name="line-182"></a> <span class='hs-varid'>throwM</span> <span class='hs-keyword'>_</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Nothing</span> +<a name="line-183"></a><a name="instance%20MonadThrow%20(Either%20e)"></a><span class='hs-keyword'>instance</span> <span class='hs-varid'>e</span> <span class='hs-keyglyph'>~</span> <span class='hs-conid'>SomeException</span> <span class='hs-keyglyph'>=></span> <span class='hs-conid'>MonadThrow</span> <span class='hs-layout'>(</span><span class='hs-conid'>Either</span> <span class='hs-varid'>e</span><span class='hs-layout'>)</span> <span class='hs-keyword'>where</span> +<a name="line-184"></a> <span class='hs-varid'>throwM</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Left</span> <span class='hs-varop'>.</span> <span class='hs-varid'>toException</span> +<a name="line-185"></a> +<a name="line-186"></a><a name="instance%20MonadThrow%20IO"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>MonadThrow</span> <span class='hs-conid'>IO</span> <span class='hs-keyword'>where</span> +<a name="line-187"></a> <span class='hs-varid'>throwM</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>ControlException</span><span class='hs-varop'>.</span><span class='hs-varid'>throwIO</span> +<a name="line-188"></a><a name="instance%20MonadCatch%20IO"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>MonadCatch</span> <span class='hs-conid'>IO</span> <span class='hs-keyword'>where</span> +<a name="line-189"></a> <span class='hs-varid'>catch</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>ControlException</span><span class='hs-varop'>.</span><span class='hs-varid'>catch</span> +<a name="line-190"></a><a name="instance%20MonadMask%20IO"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>MonadMask</span> <span class='hs-conid'>IO</span> <span class='hs-keyword'>where</span> +<a name="line-191"></a> <span class='hs-varid'>mask</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>ControlException</span><span class='hs-varop'>.</span><span class='hs-varid'>mask</span> +<a name="line-192"></a> <span class='hs-varid'>uninterruptibleMask</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>ControlException</span><span class='hs-varop'>.</span><span class='hs-varid'>uninterruptibleMask</span> <a name="line-193"></a> -<a name="line-194"></a><a name="runCatch"></a><span class='hs-definition'>runCatch</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Catch</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>Either</span> <span class='hs-conid'>SomeException</span> <span class='hs-varid'>a</span> -<a name="line-195"></a><span class='hs-definition'>runCatch</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>runIdentity</span> <span class='hs-varop'>.</span> <span class='hs-varid'>runCatchT</span> -<a name="line-196"></a> -<a name="line-197"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>Monad</span> <span class='hs-varid'>m</span> <span class='hs-keyglyph'>=></span> <span class='hs-conid'>Functor</span> <span class='hs-layout'>(</span><span class='hs-conid'>CatchT</span> <span class='hs-varid'>m</span><span class='hs-layout'>)</span> <span class='hs-keyword'>where</span> -<a name="line-198"></a> <span class='hs-varid'>fmap</span> <span class='hs-varid'>f</span> <span class='hs-layout'>(</span><span class='hs-conid'>CatchT</span> <span class='hs-varid'>m</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>CatchT</span> <span class='hs-layout'>(</span><span class='hs-varid'>liftM</span> <span class='hs-layout'>(</span><span class='hs-varid'>fmap</span> <span class='hs-varid'>f</span><span class='hs-layout'>)</span> <span class='hs-varid'>m</span><span class='hs-layout'>)</span> -<a name="line-199"></a> -<a name="line-200"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>Monad</span> <span class='hs-varid'>m</span> <span class='hs-keyglyph'>=></span> <span class='hs-conid'>Applicative</span> <span class='hs-layout'>(</span><span class='hs-conid'>CatchT</span> <span class='hs-varid'>m</span><span class='hs-layout'>)</span> <span class='hs-keyword'>where</span> -<a name="line-201"></a> <span class='hs-varid'>pure</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>CatchT</span> <span class='hs-layout'>(</span><span class='hs-varid'>return</span> <span class='hs-layout'>(</span><span class='hs-conid'>Right</span> <span class='hs-varid'>a</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span> -<a name="line-202"></a> <span class='hs-layout'>(</span><span class='hs-varop'><*></span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>ap</span> -<a name="line-203"></a> -<a name="line-204"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>Monad</span> <span class='hs-varid'>m</span> <span class='hs-keyglyph'>=></span> <span class='hs-conid'>Monad</span> <span class='hs-layout'>(</span><span class='hs-conid'>CatchT</span> <span class='hs-varid'>m</span><span class='hs-layout'>)</span> <span class='hs-keyword'>where</span> -<a name="line-205"></a> <span class='hs-varid'>return</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>CatchT</span> <span class='hs-layout'>(</span><span class='hs-varid'>return</span> <span class='hs-layout'>(</span><span class='hs-conid'>Right</span> <span class='hs-varid'>a</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span> -<a name="line-206"></a> <span class='hs-conid'>CatchT</span> <span class='hs-varid'>m</span> <span class='hs-varop'>>>=</span> <span class='hs-varid'>k</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>CatchT</span> <span class='hs-varop'>$</span> <span class='hs-varid'>m</span> <span class='hs-varop'>>>=</span> <span class='hs-keyglyph'>\</span><span class='hs-varid'>ea</span> <span class='hs-keyglyph'>-></span> <span class='hs-keyword'>case</span> <span class='hs-varid'>ea</span> <span class='hs-keyword'>of</span> -<a name="line-207"></a> <span class='hs-conid'>Left</span> <span class='hs-varid'>e</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>return</span> <span class='hs-layout'>(</span><span class='hs-conid'>Left</span> <span class='hs-varid'>e</span><span class='hs-layout'>)</span> -<a name="line-208"></a> <span class='hs-conid'>Right</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>runCatchT</span> <span class='hs-layout'>(</span><span class='hs-varid'>k</span> <span class='hs-varid'>a</span><span class='hs-layout'>)</span> -<a name="line-209"></a> <span class='hs-varid'>fail</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>CatchT</span> <span class='hs-varop'>.</span> <span class='hs-varid'>return</span> <span class='hs-varop'>.</span> <span class='hs-conid'>Left</span> <span class='hs-varop'>.</span> <span class='hs-varid'>toException</span> <span class='hs-varop'>.</span> <span class='hs-varid'>userError</span> -<a name="line-210"></a> -<a name="line-211"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>MonadFix</span> <span class='hs-varid'>m</span> <span class='hs-keyglyph'>=></span> <span class='hs-conid'>MonadFix</span> <span class='hs-layout'>(</span><span class='hs-conid'>CatchT</span> <span class='hs-varid'>m</span><span class='hs-layout'>)</span> <span class='hs-keyword'>where</span> -<a name="line-212"></a> <span class='hs-varid'>mfix</span> <span class='hs-varid'>f</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>CatchT</span> <span class='hs-varop'>$</span> <span class='hs-varid'>mfix</span> <span class='hs-varop'>$</span> <span class='hs-keyglyph'>\</span><span class='hs-varid'>a</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>runCatchT</span> <span class='hs-varop'>$</span> <span class='hs-varid'>f</span> <span class='hs-varop'>$</span> <span class='hs-keyword'>case</span> <span class='hs-varid'>a</span> <span class='hs-keyword'>of</span> -<a name="line-213"></a> <span class='hs-conid'>Right</span> <span class='hs-varid'>r</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>r</span> -<a name="line-214"></a> <span class='hs-keyword'>_</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>error</span> <span class='hs-str'>"empty mfix argument"</span> -<a name="line-215"></a> -<a name="line-216"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>Foldable</span> <span class='hs-varid'>m</span> <span class='hs-keyglyph'>=></span> <span class='hs-conid'>Foldable</span> <span class='hs-layout'>(</span><span class='hs-conid'>CatchT</span> <span class='hs-varid'>m</span><span class='hs-layout'>)</span> <span class='hs-keyword'>where</span> -<a name="line-217"></a> <span class='hs-varid'>foldMap</span> <span class='hs-varid'>f</span> <span class='hs-layout'>(</span><span class='hs-conid'>CatchT</span> <span class='hs-varid'>m</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>foldMap</span> <span class='hs-layout'>(</span><span class='hs-varid'>foldMapEither</span> <span class='hs-varid'>f</span><span class='hs-layout'>)</span> <span class='hs-varid'>m</span> <span class='hs-keyword'>where</span> -<a name="line-218"></a> <span class='hs-varid'>foldMapEither</span> <span class='hs-varid'>g</span> <span class='hs-layout'>(</span><span class='hs-conid'>Right</span> <span class='hs-varid'>a</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>g</span> <span class='hs-varid'>a</span> -<a name="line-219"></a> <span class='hs-varid'>foldMapEither</span> <span class='hs-keyword'>_</span> <span class='hs-layout'>(</span><span class='hs-conid'>Left</span> <span class='hs-keyword'>_</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>mempty</span> -<a name="line-220"></a> -<a name="line-221"></a><span class='hs-keyword'>instance</span> <span class='hs-layout'>(</span><span class='hs-conid'>Monad</span> <span class='hs-varid'>m</span><span class='hs-layout'>,</span> <span class='hs-conid'>Traversable</span> <span class='hs-varid'>m</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=></span> <span class='hs-conid'>Traversable</span> <span class='hs-layout'>(</span><span class='hs-conid'>CatchT</span> <span class='hs-varid'>m</span><span class='hs-layout'>)</span> <span class='hs-keyword'>where</span> -<a name="line-222"></a> <span class='hs-varid'>traverse</span> <span class='hs-varid'>f</span> <span class='hs-layout'>(</span><span class='hs-conid'>CatchT</span> <span class='hs-varid'>m</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>CatchT</span> <span class='hs-varop'><$></span> <span class='hs-conid'>Traversable</span><span class='hs-varop'>.</span><span class='hs-varid'>traverse</span> <span class='hs-layout'>(</span><span class='hs-varid'>traverseEither</span> <span class='hs-varid'>f</span><span class='hs-layout'>)</span> <span class='hs-varid'>m</span> <span class='hs-keyword'>where</span> -<a name="line-223"></a> <span class='hs-varid'>traverseEither</span> <span class='hs-varid'>g</span> <span class='hs-layout'>(</span><span class='hs-conid'>Right</span> <span class='hs-varid'>a</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Right</span> <span class='hs-varop'><$></span> <span class='hs-varid'>g</span> <span class='hs-varid'>a</span> -<a name="line-224"></a> <span class='hs-varid'>traverseEither</span> <span class='hs-keyword'>_</span> <span class='hs-layout'>(</span><span class='hs-conid'>Left</span> <span class='hs-varid'>e</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>pure</span> <span class='hs-layout'>(</span><span class='hs-conid'>Left</span> <span class='hs-varid'>e</span><span class='hs-layout'>)</span> -<a name="line-225"></a> -<a name="line-226"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>Monad</span> <span class='hs-varid'>m</span> <span class='hs-keyglyph'>=></span> <span class='hs-conid'>Alternative</span> <span class='hs-layout'>(</span><span class='hs-conid'>CatchT</span> <span class='hs-varid'>m</span><span class='hs-layout'>)</span> <span class='hs-keyword'>where</span> -<a name="line-227"></a> <span class='hs-varid'>empty</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>mzero</span> -<a name="line-228"></a> <span class='hs-layout'>(</span><span class='hs-varop'><|></span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>mplus</span> -<a name="line-229"></a> -<a name="line-230"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>Monad</span> <span class='hs-varid'>m</span> <span class='hs-keyglyph'>=></span> <span class='hs-conid'>MonadPlus</span> <span class='hs-layout'>(</span><span class='hs-conid'>CatchT</span> <span class='hs-varid'>m</span><span class='hs-layout'>)</span> <span class='hs-keyword'>where</span> -<a name="line-231"></a> <span class='hs-varid'>mzero</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>CatchT</span> <span class='hs-varop'>$</span> <span class='hs-varid'>return</span> <span class='hs-varop'>$</span> <span class='hs-conid'>Left</span> <span class='hs-varop'>$</span> <span class='hs-varid'>toException</span> <span class='hs-varop'>$</span> <span class='hs-varid'>userError</span> <span class='hs-str'>""</span> -<a name="line-232"></a> <span class='hs-varid'>mplus</span> <span class='hs-layout'>(</span><span class='hs-conid'>CatchT</span> <span class='hs-varid'>m</span><span class='hs-layout'>)</span> <span class='hs-layout'>(</span><span class='hs-conid'>CatchT</span> <span class='hs-varid'>n</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>CatchT</span> <span class='hs-varop'>$</span> <span class='hs-varid'>m</span> <span class='hs-varop'>>>=</span> <span class='hs-keyglyph'>\</span><span class='hs-varid'>ea</span> <span class='hs-keyglyph'>-></span> <span class='hs-keyword'>case</span> <span class='hs-varid'>ea</span> <span class='hs-keyword'>of</span> -<a name="line-233"></a> <span class='hs-conid'>Left</span> <span class='hs-keyword'>_</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>n</span> -<a name="line-234"></a> <span class='hs-conid'>Right</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>return</span> <span class='hs-layout'>(</span><span class='hs-conid'>Right</span> <span class='hs-varid'>a</span><span class='hs-layout'>)</span> -<a name="line-235"></a> -<a name="line-236"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>MonadTrans</span> <span class='hs-conid'>CatchT</span> <span class='hs-keyword'>where</span> -<a name="line-237"></a> <span class='hs-varid'>lift</span> <span class='hs-varid'>m</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>CatchT</span> <span class='hs-varop'>$</span> <span class='hs-keyword'>do</span> -<a name="line-238"></a> <span class='hs-varid'>a</span> <span class='hs-keyglyph'><-</span> <span class='hs-varid'>m</span> -<a name="line-239"></a> <span class='hs-varid'>return</span> <span class='hs-varop'>$</span> <span class='hs-conid'>Right</span> <span class='hs-varid'>a</span> -<a name="line-240"></a> -<a name="line-241"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>MonadIO</span> <span class='hs-varid'>m</span> <span class='hs-keyglyph'>=></span> <span class='hs-conid'>MonadIO</span> <span class='hs-layout'>(</span><span class='hs-conid'>CatchT</span> <span class='hs-varid'>m</span><span class='hs-layout'>)</span> <span class='hs-keyword'>where</span> -<a name="line-242"></a> <span class='hs-varid'>liftIO</span> <span class='hs-varid'>m</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>CatchT</span> <span class='hs-varop'>$</span> <span class='hs-keyword'>do</span> -<a name="line-243"></a> <span class='hs-varid'>a</span> <span class='hs-keyglyph'><-</span> <span class='hs-varid'>liftIO</span> <span class='hs-varid'>m</span> -<a name="line-244"></a> <span class='hs-varid'>return</span> <span class='hs-varop'>$</span> <span class='hs-conid'>Right</span> <span class='hs-varid'>a</span> -<a name="line-245"></a> -<a name="line-246"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>Monad</span> <span class='hs-varid'>m</span> <span class='hs-keyglyph'>=></span> <span class='hs-conid'>MonadCatch</span> <span class='hs-layout'>(</span><span class='hs-conid'>CatchT</span> <span class='hs-varid'>m</span><span class='hs-layout'>)</span> <span class='hs-keyword'>where</span> -<a name="line-247"></a> <span class='hs-varid'>throwM</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>CatchT</span> <span class='hs-varop'>.</span> <span class='hs-varid'>return</span> <span class='hs-varop'>.</span> <span class='hs-conid'>Left</span> <span class='hs-varop'>.</span> <span class='hs-varid'>toException</span> -<a name="line-248"></a> <span class='hs-varid'>catch</span> <span class='hs-layout'>(</span><span class='hs-conid'>CatchT</span> <span class='hs-varid'>m</span><span class='hs-layout'>)</span> <span class='hs-varid'>c</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>CatchT</span> <span class='hs-varop'>$</span> <span class='hs-varid'>m</span> <span class='hs-varop'>>>=</span> <span class='hs-keyglyph'>\</span><span class='hs-varid'>ea</span> <span class='hs-keyglyph'>-></span> <span class='hs-keyword'>case</span> <span class='hs-varid'>ea</span> <span class='hs-keyword'>of</span> -<a name="line-249"></a> <span class='hs-conid'>Left</span> <span class='hs-varid'>e</span> <span class='hs-keyglyph'>-></span> <span class='hs-keyword'>case</span> <span class='hs-varid'>fromException</span> <span class='hs-varid'>e</span> <span class='hs-keyword'>of</span> -<a name="line-250"></a> <span class='hs-conid'>Just</span> <span class='hs-varid'>e'</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>runCatchT</span> <span class='hs-layout'>(</span><span class='hs-varid'>c</span> <span class='hs-varid'>e'</span><span class='hs-layout'>)</span> -<a name="line-251"></a> <span class='hs-conid'>Nothing</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>return</span> <span class='hs-layout'>(</span><span class='hs-conid'>Left</span> <span class='hs-varid'>e</span><span class='hs-layout'>)</span> -<a name="line-252"></a> <span class='hs-conid'>Right</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>return</span> <span class='hs-layout'>(</span><span class='hs-conid'>Right</span> <span class='hs-varid'>a</span><span class='hs-layout'>)</span> -<a name="line-253"></a> <span class='hs-varid'>mask</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>a</span> <span class='hs-varid'>id</span> -<a name="line-254"></a> -<a name="line-255"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>MonadState</span> <span class='hs-varid'>s</span> <span class='hs-varid'>m</span> <span class='hs-keyglyph'>=></span> <span class='hs-conid'>MonadState</span> <span class='hs-varid'>s</span> <span class='hs-layout'>(</span><span class='hs-conid'>CatchT</span> <span class='hs-varid'>m</span><span class='hs-layout'>)</span> <span class='hs-keyword'>where</span> -<a name="line-256"></a> <span class='hs-varid'>get</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>lift</span> <span class='hs-varid'>get</span> -<a name="line-257"></a> <span class='hs-varid'>put</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>lift</span> <span class='hs-varop'>.</span> <span class='hs-varid'>put</span> -<a name="line-258"></a><span class='hs-cpp'>#if MIN_VERSION_mtl(2,1,0)</span> -<a name="line-259"></a> <span class='hs-varid'>state</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>lift</span> <span class='hs-varop'>.</span> <span class='hs-varid'>state</span> -<a name="line-260"></a><span class='hs-cpp'>#endif</span> -<a name="line-261"></a> -<a name="line-262"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>MonadReader</span> <span class='hs-varid'>e</span> <span class='hs-varid'>m</span> <span class='hs-keyglyph'>=></span> <span class='hs-conid'>MonadReader</span> <span class='hs-varid'>e</span> <span class='hs-layout'>(</span><span class='hs-conid'>CatchT</span> <span class='hs-varid'>m</span><span class='hs-layout'>)</span> <span class='hs-keyword'>where</span> -<a name="line-263"></a> <span class='hs-varid'>ask</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>lift</span> <span class='hs-varid'>ask</span> -<a name="line-264"></a> <span class='hs-varid'>local</span> <span class='hs-varid'>f</span> <span class='hs-layout'>(</span><span class='hs-conid'>CatchT</span> <span class='hs-varid'>m</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>CatchT</span> <span class='hs-layout'>(</span><span class='hs-varid'>local</span> <span class='hs-varid'>f</span> <span class='hs-varid'>m</span><span class='hs-layout'>)</span> -<a name="line-265"></a> -<a name="line-266"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>MonadWriter</span> <span class='hs-varid'>w</span> <span class='hs-varid'>m</span> <span class='hs-keyglyph'>=></span> <span class='hs-conid'>MonadWriter</span> <span class='hs-varid'>w</span> <span class='hs-layout'>(</span><span class='hs-conid'>CatchT</span> <span class='hs-varid'>m</span><span class='hs-layout'>)</span> <span class='hs-keyword'>where</span> -<a name="line-267"></a> <span class='hs-varid'>tell</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>lift</span> <span class='hs-varop'>.</span> <span class='hs-varid'>tell</span> -<a name="line-268"></a> <span class='hs-varid'>listen</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>mapCatchT</span> <span class='hs-varop'>$</span> <span class='hs-keyglyph'>\</span> <span class='hs-varid'>m</span> <span class='hs-keyglyph'>-></span> <span class='hs-keyword'>do</span> -<a name="line-269"></a> <span class='hs-layout'>(</span><span class='hs-varid'>a</span><span class='hs-layout'>,</span> <span class='hs-varid'>w</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'><-</span> <span class='hs-varid'>listen</span> <span class='hs-varid'>m</span> -<a name="line-270"></a> <span class='hs-varid'>return</span> <span class='hs-varop'>$!</span> <span class='hs-varid'>fmap</span> <span class='hs-layout'>(</span><span class='hs-keyglyph'>\</span> <span class='hs-varid'>r</span> <span class='hs-keyglyph'>-></span> <span class='hs-layout'>(</span><span class='hs-varid'>r</span><span class='hs-layout'>,</span> <span class='hs-varid'>w</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span> <span class='hs-varid'>a</span> -<a name="line-271"></a> <span class='hs-varid'>pass</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>mapCatchT</span> <span class='hs-varop'>$</span> <span class='hs-keyglyph'>\</span> <span class='hs-varid'>m</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>pass</span> <span class='hs-varop'>$</span> <span class='hs-keyword'>do</span> -<a name="line-272"></a> <span class='hs-varid'>a</span> <span class='hs-keyglyph'><-</span> <span class='hs-varid'>m</span> -<a name="line-273"></a> <span class='hs-varid'>return</span> <span class='hs-varop'>$!</span> <span class='hs-keyword'>case</span> <span class='hs-varid'>a</span> <span class='hs-keyword'>of</span> -<a name="line-274"></a> <span class='hs-conid'>Left</span> <span class='hs-varid'>l</span> <span class='hs-keyglyph'>-></span> <span class='hs-layout'>(</span><span class='hs-conid'>Left</span> <span class='hs-varid'>l</span><span class='hs-layout'>,</span> <span class='hs-varid'>id</span><span class='hs-layout'>)</span> -<a name="line-275"></a> <span class='hs-conid'>Right</span> <span class='hs-layout'>(</span><span class='hs-varid'>r</span><span class='hs-layout'>,</span> <span class='hs-varid'>f</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-></span> <span class='hs-layout'>(</span><span class='hs-conid'>Right</span> <span class='hs-varid'>r</span><span class='hs-layout'>,</span> <span class='hs-varid'>f</span><span class='hs-layout'>)</span> -<a name="line-276"></a><span class='hs-cpp'>#if MIN_VERSION_mtl(2,1,0)</span> -<a name="line-277"></a> <span class='hs-varid'>writer</span> <span class='hs-varid'>aw</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>CatchT</span> <span class='hs-layout'>(</span><span class='hs-conid'>Right</span> <span class='hs-varop'>`liftM`</span> <span class='hs-varid'>writer</span> <span class='hs-varid'>aw</span><span class='hs-layout'>)</span> -<a name="line-278"></a><span class='hs-cpp'>#endif</span> -<a name="line-279"></a> -<a name="line-280"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>MonadRWS</span> <span class='hs-varid'>r</span> <span class='hs-varid'>w</span> <span class='hs-varid'>s</span> <span class='hs-varid'>m</span> <span class='hs-keyglyph'>=></span> <span class='hs-conid'>MonadRWS</span> <span class='hs-varid'>r</span> <span class='hs-varid'>w</span> <span class='hs-varid'>s</span> <span class='hs-layout'>(</span><span class='hs-conid'>CatchT</span> <span class='hs-varid'>m</span><span class='hs-layout'>)</span> -<a name="line-281"></a> -<a name="line-282"></a><a name="mapCatchT"></a><span class='hs-comment'>-- | Map the unwrapped computation using the given function.</span> -<a name="line-283"></a><span class='hs-comment'>--</span> -<a name="line-284"></a><span class='hs-comment'>-- * @'runErrorT' ('mapErrorT' f m) = f ('runErrorT' m@)</span> -<a name="line-285"></a><span class='hs-definition'>mapCatchT</span> <span class='hs-keyglyph'>::</span> <span class='hs-layout'>(</span><span class='hs-varid'>m</span> <span class='hs-layout'>(</span><span class='hs-conid'>Either</span> <span class='hs-conid'>SomeException</span> <span class='hs-varid'>a</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>n</span> <span class='hs-layout'>(</span><span class='hs-conid'>Either</span> <span class='hs-conid'>SomeException</span> <span class='hs-varid'>b</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span> -<a name="line-286"></a> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>CatchT</span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span> -<a name="line-287"></a> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>CatchT</span> <span class='hs-varid'>n</span> <span class='hs-varid'>b</span> -<a name="line-288"></a><span class='hs-definition'>mapCatchT</span> <span class='hs-varid'>f</span> <span class='hs-varid'>m</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>CatchT</span> <span class='hs-varop'>$</span> <span class='hs-varid'>f</span> <span class='hs-layout'>(</span><span class='hs-varid'>runCatchT</span> <span class='hs-varid'>m</span><span class='hs-layout'>)</span> +<a name="line-194"></a><a name="instance%20MonadThrow%20STM"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>MonadThrow</span> <span class='hs-conid'>STM</span> <span class='hs-keyword'>where</span> +<a name="line-195"></a> <span class='hs-varid'>throwM</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>STM</span><span class='hs-varop'>.</span><span class='hs-varid'>throwSTM</span> +<a name="line-196"></a><a name="instance%20MonadCatch%20STM"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>MonadCatch</span> <span class='hs-conid'>STM</span> <span class='hs-keyword'>where</span> +<a name="line-197"></a> <span class='hs-varid'>catch</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>STM</span><span class='hs-varop'>.</span><span class='hs-varid'>catchSTM</span> +<a name="line-198"></a> +<a name="line-199"></a><a name="instance%20MonadThrow%20(IdentityT%20m)"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>MonadThrow</span> <span class='hs-varid'>m</span> <span class='hs-keyglyph'>=></span> <span class='hs-conid'>MonadThrow</span> <span class='hs-layout'>(</span><span class='hs-conid'>IdentityT</span> <span class='hs-varid'>m</span><span class='hs-layout'>)</span> <span class='hs-keyword'>where</span> +<a name="line-200"></a> <span class='hs-varid'>throwM</span> <span class='hs-varid'>e</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>lift</span> <span class='hs-varop'>$</span> <span class='hs-varid'>throwM</span> <span class='hs-varid'>e</span> +<a name="line-201"></a><a name="instance%20MonadCatch%20(IdentityT%20m)"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>MonadCatch</span> <span class='hs-varid'>m</span> <span class='hs-keyglyph'>=></span> <span class='hs-conid'>MonadCatch</span> <span class='hs-layout'>(</span><span class='hs-conid'>IdentityT</span> <span class='hs-varid'>m</span><span class='hs-layout'>)</span> <span class='hs-keyword'>where</span> +<a name="line-202"></a> <span class='hs-varid'>catch</span> <span class='hs-layout'>(</span><span class='hs-conid'>IdentityT</span> <span class='hs-varid'>m</span><span class='hs-layout'>)</span> <span class='hs-varid'>f</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>IdentityT</span> <span class='hs-layout'>(</span><span class='hs-varid'>catch</span> <span class='hs-varid'>m</span> <span class='hs-layout'>(</span><span class='hs-varid'>runIdentityT</span> <span class='hs-varop'>.</span> <span class='hs-varid'>f</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span> +<a name="line-203"></a><a name="instance%20MonadMask%20(IdentityT%20m)"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>MonadMask</span> <span class='hs-varid'>m</span> <span class='hs-keyglyph'>=></span> <span class='hs-conid'>MonadMask</span> <span class='hs-layout'>(</span><span class='hs-conid'>IdentityT</span> <span class='hs-varid'>m</span><span class='hs-layout'>)</span> <span class='hs-keyword'>where</span> +<a name="line-204"></a> <span class='hs-varid'>mask</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>IdentityT</span> <span class='hs-varop'>$</span> <span class='hs-varid'>mask</span> <span class='hs-varop'>$</span> <span class='hs-keyglyph'>\</span><span class='hs-varid'>u</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>runIdentityT</span> <span class='hs-layout'>(</span><span class='hs-varid'>a</span> <span class='hs-varop'>$</span> <span class='hs-varid'>q</span> <span class='hs-varid'>u</span><span class='hs-layout'>)</span> +<a name="line-205"></a> <span class='hs-keyword'>where</span> <span class='hs-varid'>q</span> <span class='hs-keyglyph'>::</span> <span class='hs-layout'>(</span><span class='hs-varid'>m</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>IdentityT</span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>IdentityT</span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span> +<a name="line-206"></a> <span class='hs-varid'>q</span> <span class='hs-varid'>u</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>IdentityT</span> <span class='hs-varop'>.</span> <span class='hs-varid'>u</span> <span class='hs-varop'>.</span> <span class='hs-varid'>runIdentityT</span> +<a name="line-207"></a> <span class='hs-varid'>uninterruptibleMask</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>=</span> +<a name="line-208"></a> <span class='hs-conid'>IdentityT</span> <span class='hs-varop'>$</span> <span class='hs-varid'>uninterruptibleMask</span> <span class='hs-varop'>$</span> <span class='hs-keyglyph'>\</span><span class='hs-varid'>u</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>runIdentityT</span> <span class='hs-layout'>(</span><span class='hs-varid'>a</span> <span class='hs-varop'>$</span> <span class='hs-varid'>q</span> <span class='hs-varid'>u</span><span class='hs-layout'>)</span> +<a name="line-209"></a> <span class='hs-keyword'>where</span> <span class='hs-varid'>q</span> <span class='hs-keyglyph'>::</span> <span class='hs-layout'>(</span><span class='hs-varid'>m</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>IdentityT</span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>IdentityT</span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span> +<a name="line-210"></a> <span class='hs-varid'>q</span> <span class='hs-varid'>u</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>IdentityT</span> <span class='hs-varop'>.</span> <span class='hs-varid'>u</span> <span class='hs-varop'>.</span> <span class='hs-varid'>runIdentityT</span> +<a name="line-211"></a> +<a name="line-212"></a><a name="instance%20MonadThrow%20(LazyS.StateT%20s%20m)"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>MonadThrow</span> <span class='hs-varid'>m</span> <span class='hs-keyglyph'>=></span> <span class='hs-conid'>MonadThrow</span> <span class='hs-layout'>(</span><span class='hs-conid'>LazyS</span><span class='hs-varop'>.</span><span class='hs-conid'>StateT</span> <span class='hs-varid'>s</span> <span class='hs-varid'>m</span><span class='hs-layout'>)</span> <span class='hs-keyword'>where</span> +<a name="line-213"></a> <span class='hs-varid'>throwM</span> <span class='hs-varid'>e</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>lift</span> <span class='hs-varop'>$</span> <span class='hs-varid'>throwM</span> <span class='hs-varid'>e</span> +<a name="line-214"></a><a name="instance%20MonadCatch%20(LazyS.StateT%20s%20m)"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>MonadCatch</span> <span class='hs-varid'>m</span> <span class='hs-keyglyph'>=></span> <span class='hs-conid'>MonadCatch</span> <span class='hs-layout'>(</span><span class='hs-conid'>LazyS</span><span class='hs-varop'>.</span><span class='hs-conid'>StateT</span> <span class='hs-varid'>s</span> <span class='hs-varid'>m</span><span class='hs-layout'>)</span> <span class='hs-keyword'>where</span> +<a name="line-215"></a> <span class='hs-varid'>catch</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>LazyS</span><span class='hs-varop'>.</span><span class='hs-varid'>liftCatch</span> <span class='hs-varid'>catch</span> +<a name="line-216"></a><a name="instance%20MonadMask%20(LazyS.StateT%20s%20m)"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>MonadMask</span> <span class='hs-varid'>m</span> <span class='hs-keyglyph'>=></span> <span class='hs-conid'>MonadMask</span> <span class='hs-layout'>(</span><span class='hs-conid'>LazyS</span><span class='hs-varop'>.</span><span class='hs-conid'>StateT</span> <span class='hs-varid'>s</span> <span class='hs-varid'>m</span><span class='hs-layout'>)</span> <span class='hs-keyword'>where</span> +<a name="line-217"></a> <span class='hs-varid'>mask</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>LazyS</span><span class='hs-varop'>.</span><span class='hs-conid'>StateT</span> <span class='hs-varop'>$</span> <span class='hs-keyglyph'>\</span><span class='hs-varid'>s</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>mask</span> <span class='hs-varop'>$</span> <span class='hs-keyglyph'>\</span><span class='hs-varid'>u</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>LazyS</span><span class='hs-varop'>.</span><span class='hs-varid'>runStateT</span> <span class='hs-layout'>(</span><span class='hs-varid'>a</span> <span class='hs-varop'>$</span> <span class='hs-varid'>q</span> <span class='hs-varid'>u</span><span class='hs-layout'>)</span> <span class='hs-varid'>s</span> +<a name="line-218"></a> <span class='hs-keyword'>where</span> <span class='hs-varid'>q</span> <span class='hs-keyglyph'>::</span> <span class='hs-layout'>(</span><span class='hs-varid'>m</span> <span class='hs-layout'>(</span><span class='hs-varid'>a</span><span class='hs-layout'>,</span> <span class='hs-varid'>s</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>m</span> <span class='hs-layout'>(</span><span class='hs-varid'>a</span><span class='hs-layout'>,</span> <span class='hs-varid'>s</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>LazyS</span><span class='hs-varop'>.</span><span class='hs-conid'>StateT</span> <span class='hs-varid'>s</span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>LazyS</span><span class='hs-varop'>.</span><span class='hs-conid'>StateT</span> <span class='hs-varid'>s</span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span> +<a name="line-219"></a> <span class='hs-varid'>q</span> <span class='hs-varid'>u</span> <span class='hs-layout'>(</span><span class='hs-conid'>LazyS</span><span class='hs-varop'>.</span><span class='hs-conid'>StateT</span> <span class='hs-varid'>b</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>LazyS</span><span class='hs-varop'>.</span><span class='hs-conid'>StateT</span> <span class='hs-layout'>(</span><span class='hs-varid'>u</span> <span class='hs-varop'>.</span> <span class='hs-varid'>b</span><span class='hs-layout'>)</span> +<a name="line-220"></a> <span class='hs-varid'>uninterruptibleMask</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>=</span> +<a name="line-221"></a> <span class='hs-conid'>LazyS</span><span class='hs-varop'>.</span><span class='hs-conid'>StateT</span> <span class='hs-varop'>$</span> <span class='hs-keyglyph'>\</span><span class='hs-varid'>s</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>uninterruptibleMask</span> <span class='hs-varop'>$</span> <span class='hs-keyglyph'>\</span><span class='hs-varid'>u</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>LazyS</span><span class='hs-varop'>.</span><span class='hs-varid'>runStateT</span> <span class='hs-layout'>(</span><span class='hs-varid'>a</span> <span class='hs-varop'>$</span> <span class='hs-varid'>q</span> <span class='hs-varid'>u</span><span class='hs-layout'>)</span> <span class='hs-varid'>s</span> +<a name="line-222"></a> <span class='hs-keyword'>where</span> <span class='hs-varid'>q</span> <span class='hs-keyglyph'>::</span> <span class='hs-layout'>(</span><span class='hs-varid'>m</span> <span class='hs-layout'>(</span><span class='hs-varid'>a</span><span class='hs-layout'>,</span> <span class='hs-varid'>s</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>m</span> <span class='hs-layout'>(</span><span class='hs-varid'>a</span><span class='hs-layout'>,</span> <span class='hs-varid'>s</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>LazyS</span><span class='hs-varop'>.</span><span class='hs-conid'>StateT</span> <span class='hs-varid'>s</span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>LazyS</span><span class='hs-varop'>.</span><span class='hs-conid'>StateT</span> <span class='hs-varid'>s</span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span> +<a name="line-223"></a> <span class='hs-varid'>q</span> <span class='hs-varid'>u</span> <span class='hs-layout'>(</span><span class='hs-conid'>LazyS</span><span class='hs-varop'>.</span><span class='hs-conid'>StateT</span> <span class='hs-varid'>b</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>LazyS</span><span class='hs-varop'>.</span><span class='hs-conid'>StateT</span> <span class='hs-layout'>(</span><span class='hs-varid'>u</span> <span class='hs-varop'>.</span> <span class='hs-varid'>b</span><span class='hs-layout'>)</span> +<a name="line-224"></a> +<a name="line-225"></a><a name="instance%20MonadThrow%20(StrictS.StateT%20s%20m)"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>MonadThrow</span> <span class='hs-varid'>m</span> <span class='hs-keyglyph'>=></span> <span class='hs-conid'>MonadThrow</span> <span class='hs-layout'>(</span><span class='hs-conid'>StrictS</span><span class='hs-varop'>.</span><span class='hs-conid'>StateT</span> <span class='hs-varid'>s</span> <span class='hs-varid'>m</span><span class='hs-layout'>)</span> <span class='hs-keyword'>where</span> +<a name="line-226"></a> <span class='hs-varid'>throwM</span> <span class='hs-varid'>e</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>lift</span> <span class='hs-varop'>$</span> <span class='hs-varid'>throwM</span> <span class='hs-varid'>e</span> +<a name="line-227"></a><a name="instance%20MonadCatch%20(StrictS.StateT%20s%20m)"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>MonadCatch</span> <span class='hs-varid'>m</span> <span class='hs-keyglyph'>=></span> <span class='hs-conid'>MonadCatch</span> <span class='hs-layout'>(</span><span class='hs-conid'>StrictS</span><span class='hs-varop'>.</span><span class='hs-conid'>StateT</span> <span class='hs-varid'>s</span> <span class='hs-varid'>m</span><span class='hs-layout'>)</span> <span class='hs-keyword'>where</span> +<a name="line-228"></a> <span class='hs-varid'>catch</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>StrictS</span><span class='hs-varop'>.</span><span class='hs-varid'>liftCatch</span> <span class='hs-varid'>catch</span> +<a name="line-229"></a><a name="instance%20MonadMask%20(StrictS.StateT%20s%20m)"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>MonadMask</span> <span class='hs-varid'>m</span> <span class='hs-keyglyph'>=></span> <span class='hs-conid'>MonadMask</span> <span class='hs-layout'>(</span><span class='hs-conid'>StrictS</span><span class='hs-varop'>.</span><span class='hs-conid'>StateT</span> <span class='hs-varid'>s</span> <span class='hs-varid'>m</span><span class='hs-layout'>)</span> <span class='hs-keyword'>where</span> +<a name="line-230"></a> <span class='hs-varid'>mask</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>StrictS</span><span class='hs-varop'>.</span><span class='hs-conid'>StateT</span> <span class='hs-varop'>$</span> <span class='hs-keyglyph'>\</span><span class='hs-varid'>s</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>mask</span> <span class='hs-varop'>$</span> <span class='hs-keyglyph'>\</span><span class='hs-varid'>u</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>StrictS</span><span class='hs-varop'>.</span><span class='hs-varid'>runStateT</span> <span class='hs-layout'>(</span><span class='hs-varid'>a</span> <span class='hs-varop'>$</span> <span class='hs-varid'>q</span> <span class='hs-varid'>u</span><span class='hs-layout'>)</span> <span class='hs-varid'>s</span> +<a name="line-231"></a> <span class='hs-keyword'>where</span> <span class='hs-varid'>q</span> <span class='hs-keyglyph'>::</span> <span class='hs-layout'>(</span><span class='hs-varid'>m</span> <span class='hs-layout'>(</span><span class='hs-varid'>a</span><span class='hs-layout'>,</span> <span class='hs-varid'>s</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>m</span> <span class='hs-layout'>(</span><span class='hs-varid'>a</span><span class='hs-layout'>,</span> <span class='hs-varid'>s</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>StrictS</span><span class='hs-varop'>.</span><span class='hs-conid'>StateT</span> <span class='hs-varid'>s</span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>StrictS</span><span class='hs-varop'>.</span><span class='hs-conid'>StateT</span> <span class='hs-varid'>s</span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span> +<a name="line-232"></a> <span class='hs-varid'>q</span> <span class='hs-varid'>u</span> <span class='hs-layout'>(</span><span class='hs-conid'>StrictS</span><span class='hs-varop'>.</span><span class='hs-conid'>StateT</span> <span class='hs-varid'>b</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>StrictS</span><span class='hs-varop'>.</span><span class='hs-conid'>StateT</span> <span class='hs-layout'>(</span><span class='hs-varid'>u</span> <span class='hs-varop'>.</span> <span class='hs-varid'>b</span><span class='hs-layout'>)</span> +<a name="line-233"></a> <span class='hs-varid'>uninterruptibleMask</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>=</span> +<a name="line-234"></a> <span class='hs-conid'>StrictS</span><span class='hs-varop'>.</span><span class='hs-conid'>StateT</span> <span class='hs-varop'>$</span> <span class='hs-keyglyph'>\</span><span class='hs-varid'>s</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>uninterruptibleMask</span> <span class='hs-varop'>$</span> <span class='hs-keyglyph'>\</span><span class='hs-varid'>u</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>StrictS</span><span class='hs-varop'>.</span><span class='hs-varid'>runStateT</span> <span class='hs-layout'>(</span><span class='hs-varid'>a</span> <span class='hs-varop'>$</span> <span class='hs-varid'>q</span> <span class='hs-varid'>u</span><span class='hs-layout'>)</span> <span class='hs-varid'>s</span> +<a name="line-235"></a> <span class='hs-keyword'>where</span> <span class='hs-varid'>q</span> <span class='hs-keyglyph'>::</span> <span class='hs-layout'>(</span><span class='hs-varid'>m</span> <span class='hs-layout'>(</span><span class='hs-varid'>a</span><span class='hs-layout'>,</span> <span class='hs-varid'>s</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>m</span> <span class='hs-layout'>(</span><span class='hs-varid'>a</span><span class='hs-layout'>,</span> <span class='hs-varid'>s</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>StrictS</span><span class='hs-varop'>.</span><span class='hs-conid'>StateT</span> <span class='hs-varid'>s</span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>StrictS</span><span class='hs-varop'>.</span><span class='hs-conid'>StateT</span> <span class='hs-varid'>s</span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span> +<a name="line-236"></a> <span class='hs-varid'>q</span> <span class='hs-varid'>u</span> <span class='hs-layout'>(</span><span class='hs-conid'>StrictS</span><span class='hs-varop'>.</span><span class='hs-conid'>StateT</span> <span class='hs-varid'>b</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>StrictS</span><span class='hs-varop'>.</span><span class='hs-conid'>StateT</span> <span class='hs-layout'>(</span><span class='hs-varid'>u</span> <span class='hs-varop'>.</span> <span class='hs-varid'>b</span><span class='hs-layout'>)</span> +<a name="line-237"></a> +<a name="line-238"></a><a name="instance%20MonadThrow%20(ReaderT%20r%20m)"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>MonadThrow</span> <span class='hs-varid'>m</span> <span class='hs-keyglyph'>=></span> <span class='hs-conid'>MonadThrow</span> <span class='hs-layout'>(</span><span class='hs-conid'>ReaderT</span> <span class='hs-varid'>r</span> <span class='hs-varid'>m</span><span class='hs-layout'>)</span> <span class='hs-keyword'>where</span> +<a name="line-239"></a> <span class='hs-varid'>throwM</span> <span class='hs-varid'>e</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>lift</span> <span class='hs-varop'>$</span> <span class='hs-varid'>throwM</span> <span class='hs-varid'>e</span> +<a name="line-240"></a><a name="instance%20MonadCatch%20(ReaderT%20r%20m)"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>MonadCatch</span> <span class='hs-varid'>m</span> <span class='hs-keyglyph'>=></span> <span class='hs-conid'>MonadCatch</span> <span class='hs-layout'>(</span><span class='hs-conid'>ReaderT</span> <span class='hs-varid'>r</span> <span class='hs-varid'>m</span><span class='hs-layout'>)</span> <span class='hs-keyword'>where</span> +<a name="line-241"></a> <span class='hs-varid'>catch</span> <span class='hs-layout'>(</span><span class='hs-conid'>ReaderT</span> <span class='hs-varid'>m</span><span class='hs-layout'>)</span> <span class='hs-varid'>c</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>ReaderT</span> <span class='hs-varop'>$</span> <span class='hs-keyglyph'>\</span><span class='hs-varid'>r</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>m</span> <span class='hs-varid'>r</span> <span class='hs-varop'>`catch`</span> <span class='hs-keyglyph'>\</span><span class='hs-varid'>e</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>runReaderT</span> <span class='hs-layout'>(</span><span class='hs-varid'>c</span> <span class='hs-varid'>e</span><span class='hs-layout'>)</span> <span class='hs-varid'>r</span> +<a name="line-242"></a><a name="instance%20MonadMask%20(ReaderT%20r%20m)"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>MonadMask</span> <span class='hs-varid'>m</span> <span class='hs-keyglyph'>=></span> <span class='hs-conid'>MonadMask</span> <span class='hs-layout'>(</span><span class='hs-conid'>ReaderT</span> <span class='hs-varid'>r</span> <span class='hs-varid'>m</span><span class='hs-layout'>)</span> <span class='hs-keyword'>where</span> +<a name="line-243"></a> <span class='hs-varid'>mask</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>ReaderT</span> <span class='hs-varop'>$</span> <span class='hs-keyglyph'>\</span><span class='hs-varid'>e</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>mask</span> <span class='hs-varop'>$</span> <span class='hs-keyglyph'>\</span><span class='hs-varid'>u</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>runReaderT</span> <span class='hs-layout'>(</span><span class='hs-varid'>a</span> <span class='hs-varop'>$</span> <span class='hs-varid'>q</span> <span class='hs-varid'>u</span><span class='hs-layout'>)</span> <span class='hs-varid'>e</span> +<a name="line-244"></a> <span class='hs-keyword'>where</span> <span class='hs-varid'>q</span> <span class='hs-keyglyph'>::</span> <span class='hs-layout'>(</span><span class='hs-varid'>m</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>ReaderT</span> <span class='hs-varid'>e</span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>ReaderT</span> <span class='hs-varid'>e</span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span> +<a name="line-245"></a> <span class='hs-varid'>q</span> <span class='hs-varid'>u</span> <span class='hs-layout'>(</span><span class='hs-conid'>ReaderT</span> <span class='hs-varid'>b</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>ReaderT</span> <span class='hs-layout'>(</span><span class='hs-varid'>u</span> <span class='hs-varop'>.</span> <span class='hs-varid'>b</span><span class='hs-layout'>)</span> +<a name="line-246"></a> <span class='hs-varid'>uninterruptibleMask</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>=</span> +<a name="line-247"></a> <span class='hs-conid'>ReaderT</span> <span class='hs-varop'>$</span> <span class='hs-keyglyph'>\</span><span class='hs-varid'>e</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>uninterruptibleMask</span> <span class='hs-varop'>$</span> <span class='hs-keyglyph'>\</span><span class='hs-varid'>u</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>runReaderT</span> <span class='hs-layout'>(</span><span class='hs-varid'>a</span> <span class='hs-varop'>$</span> <span class='hs-varid'>q</span> <span class='hs-varid'>u</span><span class='hs-layout'>)</span> <span class='hs-varid'>e</span> +<a name="line-248"></a> <span class='hs-keyword'>where</span> <span class='hs-varid'>q</span> <span class='hs-keyglyph'>::</span> <span class='hs-layout'>(</span><span class='hs-varid'>m</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>ReaderT</span> <span class='hs-varid'>e</span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>ReaderT</span> <span class='hs-varid'>e</span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span> +<a name="line-249"></a> <span class='hs-varid'>q</span> <span class='hs-varid'>u</span> <span class='hs-layout'>(</span><span class='hs-conid'>ReaderT</span> <span class='hs-varid'>b</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>ReaderT</span> <span class='hs-layout'>(</span><span class='hs-varid'>u</span> <span class='hs-varop'>.</span> <span class='hs-varid'>b</span><span class='hs-layout'>)</span> +<a name="line-250"></a> +<a name="line-251"></a><a name="instance%20MonadThrow%20(StrictW.WriterT%20w%20m)"></a><span class='hs-keyword'>instance</span> <span class='hs-layout'>(</span><span class='hs-conid'>MonadThrow</span> <span class='hs-varid'>m</span><span class='hs-layout'>,</span> <span class='hs-conid'>Monoid</span> <span class='hs-varid'>w</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=></span> <span class='hs-conid'>MonadThrow</span> <span class='hs-layout'>(</span><span class='hs-conid'>StrictW</span><span class='hs-varop'>.</span><span class='hs-conid'>WriterT</span> <span class='hs-varid'>w</span> <span class='hs-varid'>m</span><span class='hs-layout'>)</span> <span class='hs-keyword'>where</span> +<a name="line-252"></a> <span class='hs-varid'>throwM</span> <span class='hs-varid'>e</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>lift</span> <span class='hs-varop'>$</span> <span class='hs-varid'>throwM</span> <span class='hs-varid'>e</span> +<a name="line-253"></a><a name="instance%20MonadCatch%20(StrictW.WriterT%20w%20m)"></a><span class='hs-keyword'>instance</span> <span class='hs-layout'>(</span><span class='hs-conid'>MonadCatch</span> <span class='hs-varid'>m</span><span class='hs-layout'>,</span> <span class='hs-conid'>Monoid</span> <span class='hs-varid'>w</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=></span> <span class='hs-conid'>MonadCatch</span> <span class='hs-layout'>(</span><span class='hs-conid'>StrictW</span><span class='hs-varop'>.</span><span class='hs-conid'>WriterT</span> <span class='hs-varid'>w</span> <span class='hs-varid'>m</span><span class='hs-layout'>)</span> <span class='hs-keyword'>where</span> +<a name="line-254"></a> <span class='hs-varid'>catch</span> <span class='hs-layout'>(</span><span class='hs-conid'>StrictW</span><span class='hs-varop'>.</span><span class='hs-conid'>WriterT</span> <span class='hs-varid'>m</span><span class='hs-layout'>)</span> <span class='hs-varid'>h</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>StrictW</span><span class='hs-varop'>.</span><span class='hs-conid'>WriterT</span> <span class='hs-varop'>$</span> <span class='hs-varid'>m</span> <span class='hs-varop'>`</span><span class='hs-varid'>catch</span> <span class='hs-varop'>`</span> <span class='hs-keyglyph'>\</span><span class='hs-varid'>e</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>StrictW</span><span class='hs-varop'>.</span><span class='hs-varid'>runWriterT</span> <span class='hs-layout'>(</span><span class='hs-varid'>h</span> <span class='hs-varid'>e</span><span class='hs-layout'>)</span> +<a name="line-255"></a><a name="instance%20MonadMask%20(StrictW.WriterT%20w%20m)"></a><span class='hs-keyword'>instance</span> <span class='hs-layout'>(</span><span class='hs-conid'>MonadMask</span> <span class='hs-varid'>m</span><span class='hs-layout'>,</span> <span class='hs-conid'>Monoid</span> <span class='hs-varid'>w</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=></span> <span class='hs-conid'>MonadMask</span> <span class='hs-layout'>(</span><span class='hs-conid'>StrictW</span><span class='hs-varop'>.</span><span class='hs-conid'>WriterT</span> <span class='hs-varid'>w</span> <span class='hs-varid'>m</span><span class='hs-layout'>)</span> <span class='hs-keyword'>where</span> +<a name="line-256"></a> <span class='hs-varid'>mask</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>StrictW</span><span class='hs-varop'>.</span><span class='hs-conid'>WriterT</span> <span class='hs-varop'>$</span> <span class='hs-varid'>mask</span> <span class='hs-varop'>$</span> <span class='hs-keyglyph'>\</span><span class='hs-varid'>u</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>StrictW</span><span class='hs-varop'>.</span><span class='hs-varid'>runWriterT</span> <span class='hs-layout'>(</span><span class='hs-varid'>a</span> <span class='hs-varop'>$</span> <span class='hs-varid'>q</span> <span class='hs-varid'>u</span><span class='hs-layout'>)</span> +<a name="line-257"></a> <span class='hs-keyword'>where</span> <span class='hs-varid'>q</span> <span class='hs-keyglyph'>::</span> <span class='hs-layout'>(</span><span class='hs-varid'>m</span> <span class='hs-layout'>(</span><span class='hs-varid'>a</span><span class='hs-layout'>,</span> <span class='hs-varid'>w</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>m</span> <span class='hs-layout'>(</span><span class='hs-varid'>a</span><span class='hs-layout'>,</span> <span class='hs-varid'>w</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>StrictW</span><span class='hs-varop'>.</span><span class='hs-conid'>WriterT</span> <span class='hs-varid'>w</span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>StrictW</span><span class='hs-varop'>.</span><span class='hs-conid'>WriterT</span> <span class='hs-varid'>w</span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span> +<a name="line-258"></a> <span class='hs-varid'>q</span> <span class='hs-varid'>u</span> <span class='hs-varid'>b</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>StrictW</span><span class='hs-varop'>.</span><span class='hs-conid'>WriterT</span> <span class='hs-varop'>$</span> <span class='hs-varid'>u</span> <span class='hs-layout'>(</span><span class='hs-conid'>StrictW</span><span class='hs-varop'>.</span><span class='hs-varid'>runWriterT</span> <span class='hs-varid'>b</span><span class='hs-layout'>)</span> +<a name="line-259"></a> <span class='hs-varid'>uninterruptibleMask</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>=</span> +<a name="line-260"></a> <span class='hs-conid'>StrictW</span><span class='hs-varop'>.</span><span class='hs-conid'>WriterT</span> <span class='hs-varop'>$</span> <span class='hs-varid'>uninterruptibleMask</span> <span class='hs-varop'>$</span> <span class='hs-keyglyph'>\</span><span class='hs-varid'>u</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>StrictW</span><span class='hs-varop'>.</span><span class='hs-varid'>runWriterT</span> <span class='hs-layout'>(</span><span class='hs-varid'>a</span> <span class='hs-varop'>$</span> <span class='hs-varid'>q</span> <span class='hs-varid'>u</span><span class='hs-layout'>)</span> +<a name="line-261"></a> <span class='hs-keyword'>where</span> <span class='hs-varid'>q</span> <span class='hs-keyglyph'>::</span> <span class='hs-layout'>(</span><span class='hs-varid'>m</span> <span class='hs-layout'>(</span><span class='hs-varid'>a</span><span class='hs-layout'>,</span> <span class='hs-varid'>w</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>m</span> <span class='hs-layout'>(</span><span class='hs-varid'>a</span><span class='hs-layout'>,</span> <span class='hs-varid'>w</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>StrictW</span><span class='hs-varop'>.</span><span class='hs-conid'>WriterT</span> <span class='hs-varid'>w</span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>StrictW</span><span class='hs-varop'>.</span><span class='hs-conid'>WriterT</span> <span class='hs-varid'>w</span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span> +<a name="line-262"></a> <span class='hs-varid'>q</span> <span class='hs-varid'>u</span> <span class='hs-varid'>b</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>StrictW</span><span class='hs-varop'>.</span><span class='hs-conid'>WriterT</span> <span class='hs-varop'>$</span> <span class='hs-varid'>u</span> <span class='hs-layout'>(</span><span class='hs-conid'>StrictW</span><span class='hs-varop'>.</span><span class='hs-varid'>runWriterT</span> <span class='hs-varid'>b</span><span class='hs-layout'>)</span> +<a name="line-263"></a> +<a name="line-264"></a><a name="instance%20MonadThrow%20(LazyW.WriterT%20w%20m)"></a><span class='hs-keyword'>instance</span> <span class='hs-layout'>(</span><span class='hs-conid'>MonadThrow</span> <span class='hs-varid'>m</span><span class='hs-layout'>,</span> <span class='hs-conid'>Monoid</span> <span class='hs-varid'>w</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=></span> <span class='hs-conid'>MonadThrow</span> <span class='hs-layout'>(</span><span class='hs-conid'>LazyW</span><span class='hs-varop'>.</span><span class='hs-conid'>WriterT</span> <span class='hs-varid'>w</span> <span class='hs-varid'>m</span><span class='hs-layout'>)</span> <span class='hs-keyword'>where</span> +<a name="line-265"></a> <span class='hs-varid'>throwM</span> <span class='hs-varid'>e</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>lift</span> <span class='hs-varop'>$</span> <span class='hs-varid'>throwM</span> <span class='hs-varid'>e</span> +<a name="line-266"></a><a name="instance%20MonadCatch%20(LazyW.WriterT%20w%20m)"></a><span class='hs-keyword'>instance</span> <span class='hs-layout'>(</span><span class='hs-conid'>MonadCatch</span> <span class='hs-varid'>m</span><span class='hs-layout'>,</span> <span class='hs-conid'>Monoid</span> <span class='hs-varid'>w</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=></span> <span class='hs-conid'>MonadCatch</span> <span class='hs-layout'>(</span><span class='hs-conid'>LazyW</span><span class='hs-varop'>.</span><span class='hs-conid'>WriterT</span> <span class='hs-varid'>w</span> <span class='hs-varid'>m</span><span class='hs-layout'>)</span> <span class='hs-keyword'>where</span> +<a name="line-267"></a> <span class='hs-varid'>catch</span> <span class='hs-layout'>(</span><span class='hs-conid'>LazyW</span><span class='hs-varop'>.</span><span class='hs-conid'>WriterT</span> <span class='hs-varid'>m</span><span class='hs-layout'>)</span> <span class='hs-varid'>h</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>LazyW</span><span class='hs-varop'>.</span><span class='hs-conid'>WriterT</span> <span class='hs-varop'>$</span> <span class='hs-varid'>m</span> <span class='hs-varop'>`</span><span class='hs-varid'>catch</span> <span class='hs-varop'>`</span> <span class='hs-keyglyph'>\</span><span class='hs-varid'>e</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>LazyW</span><span class='hs-varop'>.</span><span class='hs-varid'>runWriterT</span> <span class='hs-layout'>(</span><span class='hs-varid'>h</span> <span class='hs-varid'>e</span><span class='hs-layout'>)</span> +<a name="line-268"></a><a name="instance%20MonadMask%20(LazyW.WriterT%20w%20m)"></a><span class='hs-keyword'>instance</span> <span class='hs-layout'>(</span><span class='hs-conid'>MonadMask</span> <span class='hs-varid'>m</span><span class='hs-layout'>,</span> <span class='hs-conid'>Monoid</span> <span class='hs-varid'>w</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=></span> <span class='hs-conid'>MonadMask</span> <span class='hs-layout'>(</span><span class='hs-conid'>LazyW</span><span class='hs-varop'>.</span><span class='hs-conid'>WriterT</span> <span class='hs-varid'>w</span> <span class='hs-varid'>m</span><span class='hs-layout'>)</span> <span class='hs-keyword'>where</span> +<a name="line-269"></a> <span class='hs-varid'>mask</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>LazyW</span><span class='hs-varop'>.</span><span class='hs-conid'>WriterT</span> <span class='hs-varop'>$</span> <span class='hs-varid'>mask</span> <span class='hs-varop'>$</span> <span class='hs-keyglyph'>\</span><span class='hs-varid'>u</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>LazyW</span><span class='hs-varop'>.</span><span class='hs-varid'>runWriterT</span> <span class='hs-layout'>(</span><span class='hs-varid'>a</span> <span class='hs-varop'>$</span> <span class='hs-varid'>q</span> <span class='hs-varid'>u</span><span class='hs-layout'>)</span> +<a name="line-270"></a> <span class='hs-keyword'>where</span> <span class='hs-varid'>q</span> <span class='hs-keyglyph'>::</span> <span class='hs-layout'>(</span><span class='hs-varid'>m</span> <span class='hs-layout'>(</span><span class='hs-varid'>a</span><span class='hs-layout'>,</span> <span class='hs-varid'>w</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>m</span> <span class='hs-layout'>(</span><span class='hs-varid'>a</span><span class='hs-layout'>,</span> <span class='hs-varid'>w</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>LazyW</span><span class='hs-varop'>.</span><span class='hs-conid'>WriterT</span> <span class='hs-varid'>w</span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>LazyW</span><span class='hs-varop'>.</span><span class='hs-conid'>WriterT</span> <span class='hs-varid'>w</span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span> +<a name="line-271"></a> <span class='hs-varid'>q</span> <span class='hs-varid'>u</span> <span class='hs-varid'>b</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>LazyW</span><span class='hs-varop'>.</span><span class='hs-conid'>WriterT</span> <span class='hs-varop'>$</span> <span class='hs-varid'>u</span> <span class='hs-layout'>(</span><span class='hs-conid'>LazyW</span><span class='hs-varop'>.</span><span class='hs-varid'>runWriterT</span> <span class='hs-varid'>b</span><span class='hs-layout'>)</span> +<a name="line-272"></a> <span class='hs-varid'>uninterruptibleMask</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>=</span> +<a name="line-273"></a> <span class='hs-conid'>LazyW</span><span class='hs-varop'>.</span><span class='hs-conid'>WriterT</span> <span class='hs-varop'>$</span> <span class='hs-varid'>uninterruptibleMask</span> <span class='hs-varop'>$</span> <span class='hs-keyglyph'>\</span><span class='hs-varid'>u</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>LazyW</span><span class='hs-varop'>.</span><span class='hs-varid'>runWriterT</span> <span class='hs-layout'>(</span><span class='hs-varid'>a</span> <span class='hs-varop'>$</span> <span class='hs-varid'>q</span> <span class='hs-varid'>u</span><span class='hs-layout'>)</span> +<a name="line-274"></a> <span class='hs-keyword'>where</span> <span class='hs-varid'>q</span> <span class='hs-keyglyph'>::</span> <span class='hs-layout'>(</span><span class='hs-varid'>m</span> <span class='hs-layout'>(</span><span class='hs-varid'>a</span><span class='hs-layout'>,</span> <span class='hs-varid'>w</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>m</span> <span class='hs-layout'>(</span><span class='hs-varid'>a</span><span class='hs-layout'>,</span> <span class='hs-varid'>w</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>LazyW</span><span class='hs-varop'>.</span><span class='hs-conid'>WriterT</span> <span class='hs-varid'>w</span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>LazyW</span><span class='hs-varop'>.</span><span class='hs-conid'>WriterT</span> <span class='hs-varid'>w</span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span> +<a name="line-275"></a> <span class='hs-varid'>q</span> <span class='hs-varid'>u</span> <span class='hs-varid'>b</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>LazyW</span><span class='hs-varop'>.</span><span class='hs-conid'>WriterT</span> <span class='hs-varop'>$</span> <span class='hs-varid'>u</span> <span class='hs-layout'>(</span><span class='hs-conid'>LazyW</span><span class='hs-varop'>.</span><span class='hs-varid'>runWriterT</span> <span class='hs-varid'>b</span><span class='hs-layout'>)</span> +<a name="line-276"></a> +<a name="line-277"></a><a name="instance%20MonadThrow%20(LazyRWS.RWST%20r%20w%20s%20m)"></a><span class='hs-keyword'>instance</span> <span class='hs-layout'>(</span><span class='hs-conid'>MonadThrow</span> <span class='hs-varid'>m</span><span class='hs-layout'>,</span> <span class='hs-conid'>Monoid</span> <span class='hs-varid'>w</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=></span> <span class='hs-conid'>MonadThrow</span> <span class='hs-layout'>(</span><span class='hs-conid'>LazyRWS</span><span class='hs-varop'>.</span><span class='hs-conid'>RWST</span> <span class='hs-varid'>r</span> <span class='hs-varid'>w</span> <span class='hs-varid'>s</span> <span class='hs-varid'>m</span><span class='hs-layout'>)</span> <span class='hs-keyword'>where</span> +<a name="line-278"></a> <span class='hs-varid'>throwM</span> <span class='hs-varid'>e</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>lift</span> <span class='hs-varop'>$</span> <span class='hs-varid'>throwM</span> <span class='hs-varid'>e</span> +<a name="line-279"></a><a name="instance%20MonadCatch%20(LazyRWS.RWST%20r%20w%20s%20m)"></a><span class='hs-keyword'>instance</span> <span class='hs-layout'>(</span><span class='hs-conid'>MonadCatch</span> <span class='hs-varid'>m</span><span class='hs-layout'>,</span> <span class='hs-conid'>Monoid</span> <span class='hs-varid'>w</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=></span> <span class='hs-conid'>MonadCatch</span> <span class='hs-layout'>(</span><span class='hs-conid'>LazyRWS</span><span class='hs-varop'>.</span><span class='hs-conid'>RWST</span> <span class='hs-varid'>r</span> <span class='hs-varid'>w</span> <span class='hs-varid'>s</span> <span class='hs-varid'>m</span><span class='hs-layout'>)</span> <span class='hs-keyword'>where</span> +<a name="line-280"></a> <span class='hs-varid'>catch</span> <span class='hs-layout'>(</span><span class='hs-conid'>LazyRWS</span><span class='hs-varop'>.</span><span class='hs-conid'>RWST</span> <span class='hs-varid'>m</span><span class='hs-layout'>)</span> <span class='hs-varid'>h</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>LazyRWS</span><span class='hs-varop'>.</span><span class='hs-conid'>RWST</span> <span class='hs-varop'>$</span> <span class='hs-keyglyph'>\</span><span class='hs-varid'>r</span> <span class='hs-varid'>s</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>m</span> <span class='hs-varid'>r</span> <span class='hs-varid'>s</span> <span class='hs-varop'>`catch`</span> <span class='hs-keyglyph'>\</span><span class='hs-varid'>e</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>LazyRWS</span><span class='hs-varop'>.</span><span class='hs-varid'>runRWST</span> <span class='hs-layout'>(</span><span class='hs-varid'>h</span> <span class='hs-varid'>e</span><span class='hs-layout'>)</span> <span class='hs-varid'>r</span> <span class='hs-varid'>s</span> +<a name="line-281"></a><a name="instance%20MonadMask%20(LazyRWS.RWST%20r%20w%20s%20m)"></a><span class='hs-keyword'>instance</span> <span class='hs-layout'>(</span><span class='hs-conid'>MonadMask</span> <span class='hs-varid'>m</span><span class='hs-layout'>,</span> <span class='hs-conid'>Monoid</span> <span class='hs-varid'>w</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=></span> <span class='hs-conid'>MonadMask</span> <span class='hs-layout'>(</span><span class='hs-conid'>LazyRWS</span><span class='hs-varop'>.</span><span class='hs-conid'>RWST</span> <span class='hs-varid'>r</span> <span class='hs-varid'>w</span> <span class='hs-varid'>s</span> <span class='hs-varid'>m</span><span class='hs-layout'>)</span> <span class='hs-keyword'>where</span> +<a name="line-282"></a> <span class='hs-varid'>mask</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>LazyRWS</span><span class='hs-varop'>.</span><span class='hs-conid'>RWST</span> <span class='hs-varop'>$</span> <span class='hs-keyglyph'>\</span><span class='hs-varid'>r</span> <span class='hs-varid'>s</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>mask</span> <span class='hs-varop'>$</span> <span class='hs-keyglyph'>\</span><span class='hs-varid'>u</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>LazyRWS</span><span class='hs-varop'>.</span><span class='hs-varid'>runRWST</span> <span class='hs-layout'>(</span><span class='hs-varid'>a</span> <span class='hs-varop'>$</span> <span class='hs-varid'>q</span> <span class='hs-varid'>u</span><span class='hs-layout'>)</span> <span class='hs-varid'>r</span> <span class='hs-varid'>s</span> +<a name="line-283"></a> <span class='hs-keyword'>where</span> <span class='hs-varid'>q</span> <span class='hs-keyglyph'>::</span> <span class='hs-layout'>(</span><span class='hs-varid'>m</span> <span class='hs-layout'>(</span><span class='hs-varid'>a</span><span class='hs-layout'>,</span> <span class='hs-varid'>s</span><span class='hs-layout'>,</span> <span class='hs-varid'>w</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>m</span> <span class='hs-layout'>(</span><span class='hs-varid'>a</span><span class='hs-layout'>,</span> <span class='hs-varid'>s</span><span class='hs-layout'>,</span> <span class='hs-varid'>w</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>LazyRWS</span><span class='hs-varop'>.</span><span class='hs-conid'>RWST</span> <span class='hs-varid'>r</span> <span class='hs-varid'>w</span> <span class='hs-varid'>s</span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>LazyRWS</span><span class='hs-varop'>.</span><span class='hs-conid'>RWST</span> <span class='hs-varid'>r</span> <span class='hs-varid'>w</span> <span class='hs-varid'>s</span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span> +<a name="line-284"></a> <span class='hs-varid'>q</span> <span class='hs-varid'>u</span> <span class='hs-layout'>(</span><span class='hs-conid'>LazyRWS</span><span class='hs-varop'>.</span><span class='hs-conid'>RWST</span> <span class='hs-varid'>b</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>LazyRWS</span><span class='hs-varop'>.</span><span class='hs-conid'>RWST</span> <span class='hs-varop'>$</span> <span class='hs-keyglyph'>\</span> <span class='hs-varid'>r</span> <span class='hs-varid'>s</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>u</span> <span class='hs-layout'>(</span><span class='hs-varid'>b</span> <span class='hs-varid'>r</span> <span class='hs-varid'>s</span><span class='hs-layout'>)</span> +<a name="line-285"></a> <span class='hs-varid'>uninterruptibleMask</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>=</span> +<a name="line-286"></a> <span class='hs-conid'>LazyRWS</span><span class='hs-varop'>.</span><span class='hs-conid'>RWST</span> <span class='hs-varop'>$</span> <span class='hs-keyglyph'>\</span><span class='hs-varid'>r</span> <span class='hs-varid'>s</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>uninterruptibleMask</span> <span class='hs-varop'>$</span> <span class='hs-keyglyph'>\</span><span class='hs-varid'>u</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>LazyRWS</span><span class='hs-varop'>.</span><span class='hs-varid'>runRWST</span> <span class='hs-layout'>(</span><span class='hs-varid'>a</span> <span class='hs-varop'>$</span> <span class='hs-varid'>q</span> <span class='hs-varid'>u</span><span class='hs-layout'>)</span> <span class='hs-varid'>r</span> <span class='hs-varid'>s</span> +<a name="line-287"></a> <span class='hs-keyword'>where</span> <span class='hs-varid'>q</span> <span class='hs-keyglyph'>::</span> <span class='hs-layout'>(</span><span class='hs-varid'>m</span> <span class='hs-layout'>(</span><span class='hs-varid'>a</span><span class='hs-layout'>,</span> <span class='hs-varid'>s</span><span class='hs-layout'>,</span> <span class='hs-varid'>w</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>m</span> <span class='hs-layout'>(</span><span class='hs-varid'>a</span><span class='hs-layout'>,</span> <span class='hs-varid'>s</span><span class='hs-layout'>,</span> <span class='hs-varid'>w</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>LazyRWS</span><span class='hs-varop'>.</span><span class='hs-conid'>RWST</span> <span class='hs-varid'>r</span> <span class='hs-varid'>w</span> <span class='hs-varid'>s</span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>LazyRWS</span><span class='hs-varop'>.</span><span class='hs-conid'>RWST</span> <span class='hs-varid'>r</span> <span class='hs-varid'>w</span> <span class='hs-varid'>s</span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span> +<a name="line-288"></a> <span class='hs-varid'>q</span> <span class='hs-varid'>u</span> <span class='hs-layout'>(</span><span class='hs-conid'>LazyRWS</span><span class='hs-varop'>.</span><span class='hs-conid'>RWST</span> <span class='hs-varid'>b</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>LazyRWS</span><span class='hs-varop'>.</span><span class='hs-conid'>RWST</span> <span class='hs-varop'>$</span> <span class='hs-keyglyph'>\</span> <span class='hs-varid'>r</span> <span class='hs-varid'>s</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>u</span> <span class='hs-layout'>(</span><span class='hs-varid'>b</span> <span class='hs-varid'>r</span> <span class='hs-varid'>s</span><span class='hs-layout'>)</span> <a name="line-289"></a> -<a name="line-290"></a><span class='hs-comment'>------------------------------------------------------------------------------</span> -<a name="line-291"></a><span class='hs-comment'>-- $utilities</span> -<a name="line-292"></a><span class='hs-comment'>-- These functions follow those from "Control.Exception", except that they are</span> -<a name="line-293"></a><span class='hs-comment'>-- based on methods from the 'MonadCatch' typeclass. See</span> -<a name="line-294"></a><span class='hs-comment'>-- "Control.Exception" for API usage.</span> -<a name="line-295"></a><span class='hs-comment'>------------------------------------------------------------------------------</span> -<a name="line-296"></a> -<a name="line-297"></a><a name="catchAll"></a><span class='hs-comment'>-- | Catches all exceptions, and somewhat defeats the purpose of the extensible</span> -<a name="line-298"></a><span class='hs-comment'>-- exception system. Use sparingly.</span> -<a name="line-299"></a><span class='hs-definition'>catchAll</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>MonadCatch</span> <span class='hs-varid'>m</span> <span class='hs-keyglyph'>=></span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-></span> <span class='hs-layout'>(</span><span class='hs-conid'>SomeException</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span> -<a name="line-300"></a><span class='hs-definition'>catchAll</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>catch</span> -<a name="line-301"></a> -<a name="line-302"></a><a name="catchIOError"></a><span class='hs-comment'>-- | Catch all 'IOError' (eqv. 'IOException') exceptions. Still somewhat too</span> -<a name="line-303"></a><span class='hs-comment'>-- general, but better than using 'catchAll'. See 'catchIf' for an easy way</span> -<a name="line-304"></a><span class='hs-comment'>-- of catching specific 'IOError's based on the predicates in "System.IO.Error".</span> -<a name="line-305"></a><span class='hs-definition'>catchIOError</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>MonadCatch</span> <span class='hs-varid'>m</span> <span class='hs-keyglyph'>=></span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-></span> <span class='hs-layout'>(</span><span class='hs-conid'>IOError</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span> -<a name="line-306"></a><span class='hs-definition'>catchIOError</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>catch</span> -<a name="line-307"></a> -<a name="line-308"></a><a name="catchIf"></a><span class='hs-comment'>-- | Catch exceptions only if they pass some predicate. Often useful with the</span> -<a name="line-309"></a><span class='hs-comment'>-- predicates for testing 'IOError' values in "System.IO.Error".</span> -<a name="line-310"></a><span class='hs-definition'>catchIf</span> <span class='hs-keyglyph'>::</span> <span class='hs-layout'>(</span><span class='hs-conid'>MonadCatch</span> <span class='hs-varid'>m</span><span class='hs-layout'>,</span> <span class='hs-conid'>Exception</span> <span class='hs-varid'>e</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=></span> -<a name="line-311"></a> <span class='hs-layout'>(</span><span class='hs-varid'>e</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>Bool</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-></span> <span class='hs-layout'>(</span><span class='hs-varid'>e</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span> -<a name="line-312"></a><span class='hs-definition'>catchIf</span> <span class='hs-varid'>f</span> <span class='hs-varid'>a</span> <span class='hs-varid'>b</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>a</span> <span class='hs-varop'>`catch`</span> <span class='hs-keyglyph'>\</span><span class='hs-varid'>e</span> <span class='hs-keyglyph'>-></span> <span class='hs-keyword'>if</span> <span class='hs-varid'>f</span> <span class='hs-varid'>e</span> <span class='hs-keyword'>then</span> <span class='hs-varid'>b</span> <span class='hs-varid'>e</span> <span class='hs-keyword'>else</span> <span class='hs-varid'>throwM</span> <span class='hs-varid'>e</span> -<a name="line-313"></a> -<a name="line-314"></a><a name="catchJust"></a><span class='hs-comment'>-- | A more generalized way of determining which exceptions to catch at</span> -<a name="line-315"></a><span class='hs-comment'>-- run time.</span> -<a name="line-316"></a><span class='hs-definition'>catchJust</span> <span class='hs-keyglyph'>::</span> <span class='hs-layout'>(</span><span class='hs-conid'>MonadCatch</span> <span class='hs-varid'>m</span><span class='hs-layout'>,</span> <span class='hs-conid'>Exception</span> <span class='hs-varid'>e</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=></span> -<a name="line-317"></a> <span class='hs-layout'>(</span><span class='hs-varid'>e</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>Maybe</span> <span class='hs-varid'>b</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-></span> <span class='hs-layout'>(</span><span class='hs-varid'>b</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span> -<a name="line-318"></a><span class='hs-definition'>catchJust</span> <span class='hs-varid'>f</span> <span class='hs-varid'>a</span> <span class='hs-varid'>b</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>a</span> <span class='hs-varop'>`catch`</span> <span class='hs-keyglyph'>\</span><span class='hs-varid'>e</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>maybe</span> <span class='hs-layout'>(</span><span class='hs-varid'>throwM</span> <span class='hs-varid'>e</span><span class='hs-layout'>)</span> <span class='hs-varid'>b</span> <span class='hs-varop'>$</span> <span class='hs-varid'>f</span> <span class='hs-varid'>e</span> -<a name="line-319"></a> -<a name="line-320"></a><a name="handle"></a><span class='hs-comment'>-- | Flipped 'catch'. See "Control.Exception"'s 'ControlException.handle'.</span> -<a name="line-321"></a><span class='hs-definition'>handle</span> <span class='hs-keyglyph'>::</span> <span class='hs-layout'>(</span><span class='hs-conid'>MonadCatch</span> <span class='hs-varid'>m</span><span class='hs-layout'>,</span> <span class='hs-conid'>Exception</span> <span class='hs-varid'>e</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=></span> <span class='hs-layout'>(</span><span class='hs-varid'>e</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span> -<a name="line-322"></a><span class='hs-definition'>handle</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>flip</span> <span class='hs-varid'>catch</span> -<a name="line-323"></a><span class='hs-comment'>{-# INLINE handle #-}</span> -<a name="line-324"></a> -<a name="line-325"></a><a name="handleJust"></a><span class='hs-comment'>-- | Flipped 'catchJust'. See "Control.Exception"'s 'ControlException.handleJust'.</span> -<a name="line-326"></a><span class='hs-definition'>handleJust</span> <span class='hs-keyglyph'>::</span> <span class='hs-layout'>(</span><span class='hs-conid'>MonadCatch</span> <span class='hs-varid'>m</span><span class='hs-layout'>,</span> <span class='hs-conid'>Exception</span> <span class='hs-varid'>e</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=></span> <span class='hs-layout'>(</span><span class='hs-varid'>e</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>Maybe</span> <span class='hs-varid'>b</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-></span> <span class='hs-layout'>(</span><span class='hs-varid'>b</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span> -<a name="line-327"></a><span class='hs-definition'>handleJust</span> <span class='hs-varid'>f</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>flip</span> <span class='hs-layout'>(</span><span class='hs-varid'>catchJust</span> <span class='hs-varid'>f</span><span class='hs-layout'>)</span> -<a name="line-328"></a><span class='hs-comment'>{-# INLINE handleJust #-}</span> +<a name="line-290"></a><a name="instance%20MonadThrow%20(StrictRWS.RWST%20r%20w%20s%20m)"></a><span class='hs-keyword'>instance</span> <span class='hs-layout'>(</span><span class='hs-conid'>MonadThrow</span> <span class='hs-varid'>m</span><span class='hs-layout'>,</span> <span class='hs-conid'>Monoid</span> <span class='hs-varid'>w</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=></span> <span class='hs-conid'>MonadThrow</span> <span class='hs-layout'>(</span><span class='hs-conid'>StrictRWS</span><span class='hs-varop'>.</span><span class='hs-conid'>RWST</span> <span class='hs-varid'>r</span> <span class='hs-varid'>w</span> <span class='hs-varid'>s</span> <span class='hs-varid'>m</span><span class='hs-layout'>)</span> <span class='hs-keyword'>where</span> +<a name="line-291"></a> <span class='hs-varid'>throwM</span> <span class='hs-varid'>e</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>lift</span> <span class='hs-varop'>$</span> <span class='hs-varid'>throwM</span> <span class='hs-varid'>e</span> +<a name="line-292"></a><a name="instance%20MonadCatch%20(StrictRWS.RWST%20r%20w%20s%20m)"></a><span class='hs-keyword'>instance</span> <span class='hs-layout'>(</span><span class='hs-conid'>MonadCatch</span> <span class='hs-varid'>m</span><span class='hs-layout'>,</span> <span class='hs-conid'>Monoid</span> <span class='hs-varid'>w</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=></span> <span class='hs-conid'>MonadCatch</span> <span class='hs-layout'>(</span><span class='hs-conid'>StrictRWS</span><span class='hs-varop'>.</span><span class='hs-conid'>RWST</span> <span class='hs-varid'>r</span> <span class='hs-varid'>w</span> <span class='hs-varid'>s</span> <span class='hs-varid'>m</span><span class='hs-layout'>)</span> <span class='hs-keyword'>where</span> +<a name="line-293"></a> <span class='hs-varid'>catch</span> <span class='hs-layout'>(</span><span class='hs-conid'>StrictRWS</span><span class='hs-varop'>.</span><span class='hs-conid'>RWST</span> <span class='hs-varid'>m</span><span class='hs-layout'>)</span> <span class='hs-varid'>h</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>StrictRWS</span><span class='hs-varop'>.</span><span class='hs-conid'>RWST</span> <span class='hs-varop'>$</span> <span class='hs-keyglyph'>\</span><span class='hs-varid'>r</span> <span class='hs-varid'>s</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>m</span> <span class='hs-varid'>r</span> <span class='hs-varid'>s</span> <span class='hs-varop'>`catch`</span> <span class='hs-keyglyph'>\</span><span class='hs-varid'>e</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>StrictRWS</span><span class='hs-varop'>.</span><span class='hs-varid'>runRWST</span> <span class='hs-layout'>(</span><span class='hs-varid'>h</span> <span class='hs-varid'>e</span><span class='hs-layout'>)</span> <span class='hs-varid'>r</span> <span class='hs-varid'>s</span> +<a name="line-294"></a><a name="instance%20MonadMask%20(StrictRWS.RWST%20r%20w%20s%20m)"></a><span class='hs-keyword'>instance</span> <span class='hs-layout'>(</span><span class='hs-conid'>MonadMask</span> <span class='hs-varid'>m</span><span class='hs-layout'>,</span> <span class='hs-conid'>Monoid</span> <span class='hs-varid'>w</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=></span> <span class='hs-conid'>MonadMask</span> <span class='hs-layout'>(</span><span class='hs-conid'>StrictRWS</span><span class='hs-varop'>.</span><span class='hs-conid'>RWST</span> <span class='hs-varid'>r</span> <span class='hs-varid'>w</span> <span class='hs-varid'>s</span> <span class='hs-varid'>m</span><span class='hs-layout'>)</span> <span class='hs-keyword'>where</span> +<a name="line-295"></a> <span class='hs-varid'>mask</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>StrictRWS</span><span class='hs-varop'>.</span><span class='hs-conid'>RWST</span> <span class='hs-varop'>$</span> <span class='hs-keyglyph'>\</span><span class='hs-varid'>r</span> <span class='hs-varid'>s</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>mask</span> <span class='hs-varop'>$</span> <span class='hs-keyglyph'>\</span><span class='hs-varid'>u</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>StrictRWS</span><span class='hs-varop'>.</span><span class='hs-varid'>runRWST</span> <span class='hs-layout'>(</span><span class='hs-varid'>a</span> <span class='hs-varop'>$</span> <span class='hs-varid'>q</span> <span class='hs-varid'>u</span><span class='hs-layout'>)</span> <span class='hs-varid'>r</span> <span class='hs-varid'>s</span> +<a name="line-296"></a> <span class='hs-keyword'>where</span> <span class='hs-varid'>q</span> <span class='hs-keyglyph'>::</span> <span class='hs-layout'>(</span><span class='hs-varid'>m</span> <span class='hs-layout'>(</span><span class='hs-varid'>a</span><span class='hs-layout'>,</span> <span class='hs-varid'>s</span><span class='hs-layout'>,</span> <span class='hs-varid'>w</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>m</span> <span class='hs-layout'>(</span><span class='hs-varid'>a</span><span class='hs-layout'>,</span> <span class='hs-varid'>s</span><span class='hs-layout'>,</span> <span class='hs-varid'>w</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>StrictRWS</span><span class='hs-varop'>.</span><span class='hs-conid'>RWST</span> <span class='hs-varid'>r</span> <span class='hs-varid'>w</span> <span class='hs-varid'>s</span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>StrictRWS</span><span class='hs-varop'>.</span><span class='hs-conid'>RWST</span> <span class='hs-varid'>r</span> <span class='hs-varid'>w</span> <span class='hs-varid'>s</span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span> +<a name="line-297"></a> <span class='hs-varid'>q</span> <span class='hs-varid'>u</span> <span class='hs-layout'>(</span><span class='hs-conid'>StrictRWS</span><span class='hs-varop'>.</span><span class='hs-conid'>RWST</span> <span class='hs-varid'>b</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>StrictRWS</span><span class='hs-varop'>.</span><span class='hs-conid'>RWST</span> <span class='hs-varop'>$</span> <span class='hs-keyglyph'>\</span> <span class='hs-varid'>r</span> <span class='hs-varid'>s</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>u</span> <span class='hs-layout'>(</span><span class='hs-varid'>b</span> <span class='hs-varid'>r</span> <span class='hs-varid'>s</span><span class='hs-layout'>)</span> +<a name="line-298"></a> <span class='hs-varid'>uninterruptibleMask</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>=</span> +<a name="line-299"></a> <span class='hs-conid'>StrictRWS</span><span class='hs-varop'>.</span><span class='hs-conid'>RWST</span> <span class='hs-varop'>$</span> <span class='hs-keyglyph'>\</span><span class='hs-varid'>r</span> <span class='hs-varid'>s</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>uninterruptibleMask</span> <span class='hs-varop'>$</span> <span class='hs-keyglyph'>\</span><span class='hs-varid'>u</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>StrictRWS</span><span class='hs-varop'>.</span><span class='hs-varid'>runRWST</span> <span class='hs-layout'>(</span><span class='hs-varid'>a</span> <span class='hs-varop'>$</span> <span class='hs-varid'>q</span> <span class='hs-varid'>u</span><span class='hs-layout'>)</span> <span class='hs-varid'>r</span> <span class='hs-varid'>s</span> +<a name="line-300"></a> <span class='hs-keyword'>where</span> <span class='hs-varid'>q</span> <span class='hs-keyglyph'>::</span> <span class='hs-layout'>(</span><span class='hs-varid'>m</span> <span class='hs-layout'>(</span><span class='hs-varid'>a</span><span class='hs-layout'>,</span> <span class='hs-varid'>s</span><span class='hs-layout'>,</span> <span class='hs-varid'>w</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>m</span> <span class='hs-layout'>(</span><span class='hs-varid'>a</span><span class='hs-layout'>,</span> <span class='hs-varid'>s</span><span class='hs-layout'>,</span> <span class='hs-varid'>w</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>StrictRWS</span><span class='hs-varop'>.</span><span class='hs-conid'>RWST</span> <span class='hs-varid'>r</span> <span class='hs-varid'>w</span> <span class='hs-varid'>s</span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>StrictRWS</span><span class='hs-varop'>.</span><span class='hs-conid'>RWST</span> <span class='hs-varid'>r</span> <span class='hs-varid'>w</span> <span class='hs-varid'>s</span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span> +<a name="line-301"></a> <span class='hs-varid'>q</span> <span class='hs-varid'>u</span> <span class='hs-layout'>(</span><span class='hs-conid'>StrictRWS</span><span class='hs-varop'>.</span><span class='hs-conid'>RWST</span> <span class='hs-varid'>b</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>StrictRWS</span><span class='hs-varop'>.</span><span class='hs-conid'>RWST</span> <span class='hs-varop'>$</span> <span class='hs-keyglyph'>\</span> <span class='hs-varid'>r</span> <span class='hs-varid'>s</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>u</span> <span class='hs-layout'>(</span><span class='hs-varid'>b</span> <span class='hs-varid'>r</span> <span class='hs-varid'>s</span><span class='hs-layout'>)</span> +<a name="line-302"></a> +<a name="line-303"></a><a name="instance%20MonadThrow%20(ListT%20m)"></a><span class='hs-comment'>-- Transformers which are only instances of MonadThrow and MonadCatch, not MonadMask</span> +<a name="line-304"></a><a name="instance%20MonadThrow%20(ListT%20m)"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>MonadThrow</span> <span class='hs-varid'>m</span> <span class='hs-keyglyph'>=></span> <span class='hs-conid'>MonadThrow</span> <span class='hs-layout'>(</span><span class='hs-conid'>ListT</span> <span class='hs-varid'>m</span><span class='hs-layout'>)</span> <span class='hs-keyword'>where</span> +<a name="line-305"></a> <span class='hs-varid'>throwM</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>lift</span> <span class='hs-varop'>.</span> <span class='hs-varid'>throwM</span> +<a name="line-306"></a><a name="instance%20MonadCatch%20(ListT%20m)"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>MonadCatch</span> <span class='hs-varid'>m</span> <span class='hs-keyglyph'>=></span> <span class='hs-conid'>MonadCatch</span> <span class='hs-layout'>(</span><span class='hs-conid'>ListT</span> <span class='hs-varid'>m</span><span class='hs-layout'>)</span> <span class='hs-keyword'>where</span> +<a name="line-307"></a> <span class='hs-varid'>catch</span> <span class='hs-layout'>(</span><span class='hs-conid'>ListT</span> <span class='hs-varid'>m</span><span class='hs-layout'>)</span> <span class='hs-varid'>f</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>ListT</span> <span class='hs-varop'>$</span> <span class='hs-varid'>catch</span> <span class='hs-varid'>m</span> <span class='hs-layout'>(</span><span class='hs-varid'>runListT</span> <span class='hs-varop'>.</span> <span class='hs-varid'>f</span><span class='hs-layout'>)</span> +<a name="line-308"></a> +<a name="line-309"></a><a name="instance%20MonadThrow%20(MaybeT%20m)"></a><span class='hs-comment'>-- | Throws exceptions into the base monad.</span> +<a name="line-310"></a><a name="instance%20MonadThrow%20(MaybeT%20m)"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>MonadThrow</span> <span class='hs-varid'>m</span> <span class='hs-keyglyph'>=></span> <span class='hs-conid'>MonadThrow</span> <span class='hs-layout'>(</span><span class='hs-conid'>MaybeT</span> <span class='hs-varid'>m</span><span class='hs-layout'>)</span> <span class='hs-keyword'>where</span> +<a name="line-311"></a> <span class='hs-varid'>throwM</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>lift</span> <span class='hs-varop'>.</span> <span class='hs-varid'>throwM</span> +<a name="line-312"></a><a name="instance%20MonadCatch%20(MaybeT%20m)"></a><span class='hs-comment'>-- | Catches exceptions from the base monad.</span> +<a name="line-313"></a><a name="instance%20MonadCatch%20(MaybeT%20m)"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>MonadCatch</span> <span class='hs-varid'>m</span> <span class='hs-keyglyph'>=></span> <span class='hs-conid'>MonadCatch</span> <span class='hs-layout'>(</span><span class='hs-conid'>MaybeT</span> <span class='hs-varid'>m</span><span class='hs-layout'>)</span> <span class='hs-keyword'>where</span> +<a name="line-314"></a> <span class='hs-varid'>catch</span> <span class='hs-layout'>(</span><span class='hs-conid'>MaybeT</span> <span class='hs-varid'>m</span><span class='hs-layout'>)</span> <span class='hs-varid'>f</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>MaybeT</span> <span class='hs-varop'>$</span> <span class='hs-varid'>catch</span> <span class='hs-varid'>m</span> <span class='hs-layout'>(</span><span class='hs-varid'>runMaybeT</span> <span class='hs-varop'>.</span> <span class='hs-varid'>f</span><span class='hs-layout'>)</span> +<a name="line-315"></a> +<a name="line-316"></a><a name="instance%20MonadThrow%20(ErrorT%20e%20m)"></a><span class='hs-comment'>-- | Throws exceptions into the base monad.</span> +<a name="line-317"></a><a name="instance%20MonadThrow%20(ErrorT%20e%20m)"></a><span class='hs-keyword'>instance</span> <span class='hs-layout'>(</span><span class='hs-conid'>Error</span> <span class='hs-varid'>e</span><span class='hs-layout'>,</span> <span class='hs-conid'>MonadThrow</span> <span class='hs-varid'>m</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=></span> <span class='hs-conid'>MonadThrow</span> <span class='hs-layout'>(</span><span class='hs-conid'>ErrorT</span> <span class='hs-varid'>e</span> <span class='hs-varid'>m</span><span class='hs-layout'>)</span> <span class='hs-keyword'>where</span> +<a name="line-318"></a> <span class='hs-varid'>throwM</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>lift</span> <span class='hs-varop'>.</span> <span class='hs-varid'>throwM</span> +<a name="line-319"></a><a name="instance%20MonadCatch%20(ErrorT%20e%20m)"></a><span class='hs-comment'>-- | Catches exceptions from the base monad.</span> +<a name="line-320"></a><a name="instance%20MonadCatch%20(ErrorT%20e%20m)"></a><span class='hs-keyword'>instance</span> <span class='hs-layout'>(</span><span class='hs-conid'>Error</span> <span class='hs-varid'>e</span><span class='hs-layout'>,</span> <span class='hs-conid'>MonadCatch</span> <span class='hs-varid'>m</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=></span> <span class='hs-conid'>MonadCatch</span> <span class='hs-layout'>(</span><span class='hs-conid'>ErrorT</span> <span class='hs-varid'>e</span> <span class='hs-varid'>m</span><span class='hs-layout'>)</span> <span class='hs-keyword'>where</span> +<a name="line-321"></a> <span class='hs-varid'>catch</span> <span class='hs-layout'>(</span><span class='hs-conid'>ErrorT</span> <span class='hs-varid'>m</span><span class='hs-layout'>)</span> <span class='hs-varid'>f</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>ErrorT</span> <span class='hs-varop'>$</span> <span class='hs-varid'>catch</span> <span class='hs-varid'>m</span> <span class='hs-layout'>(</span><span class='hs-varid'>runErrorT</span> <span class='hs-varop'>.</span> <span class='hs-varid'>f</span><span class='hs-layout'>)</span> +<a name="line-322"></a> +<a name="line-323"></a><a name="instance%20MonadThrow%20(ExceptT%20e%20m)"></a><span class='hs-comment'>-- | Throws exceptions into the base monad.</span> +<a name="line-324"></a><a name="instance%20MonadThrow%20(ExceptT%20e%20m)"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>MonadThrow</span> <span class='hs-varid'>m</span> <span class='hs-keyglyph'>=></span> <span class='hs-conid'>MonadThrow</span> <span class='hs-layout'>(</span><span class='hs-conid'>ExceptT</span> <span class='hs-varid'>e</span> <span class='hs-varid'>m</span><span class='hs-layout'>)</span> <span class='hs-keyword'>where</span> +<a name="line-325"></a> <span class='hs-varid'>throwM</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>lift</span> <span class='hs-varop'>.</span> <span class='hs-varid'>throwM</span> +<a name="line-326"></a><a name="instance%20MonadCatch%20(ExceptT%20e%20m)"></a><span class='hs-comment'>-- | Catches exceptions from the base monad.</span> +<a name="line-327"></a><a name="instance%20MonadCatch%20(ExceptT%20e%20m)"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>MonadCatch</span> <span class='hs-varid'>m</span> <span class='hs-keyglyph'>=></span> <span class='hs-conid'>MonadCatch</span> <span class='hs-layout'>(</span><span class='hs-conid'>ExceptT</span> <span class='hs-varid'>e</span> <span class='hs-varid'>m</span><span class='hs-layout'>)</span> <span class='hs-keyword'>where</span> +<a name="line-328"></a> <span class='hs-varid'>catch</span> <span class='hs-layout'>(</span><span class='hs-conid'>ExceptT</span> <span class='hs-varid'>m</span><span class='hs-layout'>)</span> <span class='hs-varid'>f</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>ExceptT</span> <span class='hs-varop'>$</span> <span class='hs-varid'>catch</span> <span class='hs-varid'>m</span> <span class='hs-layout'>(</span><span class='hs-varid'>runExceptT</span> <span class='hs-varop'>.</span> <span class='hs-varid'>f</span><span class='hs-layout'>)</span> <a name="line-329"></a> -<a name="line-330"></a><a name="try"></a><span class='hs-comment'>-- | Similar to 'catch', but returns an 'Either' result. See "Control.Exception"'s</span> -<a name="line-331"></a><span class='hs-comment'>-- 'Control.Exception.try'.</span> -<a name="line-332"></a><span class='hs-definition'>try</span> <span class='hs-keyglyph'>::</span> <span class='hs-layout'>(</span><span class='hs-conid'>MonadCatch</span> <span class='hs-varid'>m</span><span class='hs-layout'>,</span> <span class='hs-conid'>Exception</span> <span class='hs-varid'>e</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=></span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>m</span> <span class='hs-layout'>(</span><span class='hs-conid'>Either</span> <span class='hs-varid'>e</span> <span class='hs-varid'>a</span><span class='hs-layout'>)</span> -<a name="line-333"></a><span class='hs-definition'>try</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>catch</span> <span class='hs-layout'>(</span><span class='hs-conid'>Right</span> <span class='hs-varop'>`liftM`</span> <span class='hs-varid'>a</span><span class='hs-layout'>)</span> <span class='hs-layout'>(</span><span class='hs-varid'>return</span> <span class='hs-varop'>.</span> <span class='hs-conid'>Left</span><span class='hs-layout'>)</span> +<a name="line-330"></a><a name="instance%20MonadThrow%20(ContT%20r%20m)"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>MonadThrow</span> <span class='hs-varid'>m</span> <span class='hs-keyglyph'>=></span> <span class='hs-conid'>MonadThrow</span> <span class='hs-layout'>(</span><span class='hs-conid'>ContT</span> <span class='hs-varid'>r</span> <span class='hs-varid'>m</span><span class='hs-layout'>)</span> <span class='hs-keyword'>where</span> +<a name="line-331"></a> <span class='hs-varid'>throwM</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>lift</span> <span class='hs-varop'>.</span> <span class='hs-varid'>throwM</span> +<a name="line-332"></a><span class='hs-comment'>-- I don't believe any valid of MonadCatch exists for ContT.</span> +<a name="line-333"></a><span class='hs-comment'>-- instance MonadCatch m => MonadCatch (ContT r m) where</span> <a name="line-334"></a> -<a name="line-335"></a><a name="tryJust"></a><span class='hs-comment'>-- | A variant of 'try' that takes an exception predicate to select</span> -<a name="line-336"></a><span class='hs-comment'>-- which exceptions are caught. See "Control.Exception"'s 'ControlException.tryJust'</span> -<a name="line-337"></a><span class='hs-definition'>tryJust</span> <span class='hs-keyglyph'>::</span> <span class='hs-layout'>(</span><span class='hs-conid'>MonadCatch</span> <span class='hs-varid'>m</span><span class='hs-layout'>,</span> <span class='hs-conid'>Exception</span> <span class='hs-varid'>e</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=></span> -<a name="line-338"></a> <span class='hs-layout'>(</span><span class='hs-varid'>e</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>Maybe</span> <span class='hs-varid'>b</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>m</span> <span class='hs-layout'>(</span><span class='hs-conid'>Either</span> <span class='hs-varid'>b</span> <span class='hs-varid'>a</span><span class='hs-layout'>)</span> -<a name="line-339"></a><span class='hs-definition'>tryJust</span> <span class='hs-varid'>f</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>catch</span> <span class='hs-layout'>(</span><span class='hs-conid'>Right</span> <span class='hs-varop'>`liftM`</span> <span class='hs-varid'>a</span><span class='hs-layout'>)</span> <span class='hs-layout'>(</span><span class='hs-keyglyph'>\</span><span class='hs-varid'>e</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>maybe</span> <span class='hs-layout'>(</span><span class='hs-varid'>throwM</span> <span class='hs-varid'>e</span><span class='hs-layout'>)</span> <span class='hs-layout'>(</span><span class='hs-varid'>return</span> <span class='hs-varop'>.</span> <span class='hs-conid'>Left</span><span class='hs-layout'>)</span> <span class='hs-layout'>(</span><span class='hs-varid'>f</span> <span class='hs-varid'>e</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span> -<a name="line-340"></a> -<a name="line-341"></a><a name="Handler"></a><span class='hs-comment'>-- | Generalized version of 'ControlException.Handler'</span> -<a name="line-342"></a><a name="Handler"></a><span class='hs-keyword'>data</span> <span class='hs-conid'>Handler</span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>=</span> <span class='hs-keyword'>forall</span> <span class='hs-varid'>e</span> <span class='hs-varop'>.</span> <span class='hs-conid'>ControlException</span><span class='hs-varop'>.</span><span class='hs-conid'>Exception</span> <span class='hs-varid'>e</span> <span class='hs-keyglyph'>=></span> <span class='hs-conid'>Handler</span> <span class='hs-layout'>(</span><span class='hs-varid'>e</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span><span class='hs-layout'>)</span> -<a name="line-343"></a> -<a name="line-344"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>Monad</span> <span class='hs-varid'>m</span> <span class='hs-keyglyph'>=></span> <span class='hs-conid'>Functor</span> <span class='hs-layout'>(</span><span class='hs-conid'>Handler</span> <span class='hs-varid'>m</span><span class='hs-layout'>)</span> <span class='hs-keyword'>where</span> -<a name="line-345"></a> <span class='hs-varid'>fmap</span> <span class='hs-varid'>f</span> <span class='hs-layout'>(</span><span class='hs-conid'>Handler</span> <span class='hs-varid'>h</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Handler</span> <span class='hs-layout'>(</span><span class='hs-varid'>liftM</span> <span class='hs-varid'>f</span> <span class='hs-varop'>.</span> <span class='hs-varid'>h</span><span class='hs-layout'>)</span> -<a name="line-346"></a> -<a name="line-347"></a><a name="catches"></a><span class='hs-comment'>-- | Catches different sorts of exceptions. See "Control.Exception"'s 'ControlException.catches'</span> -<a name="line-348"></a><span class='hs-definition'>catches</span> <span class='hs-keyglyph'>::</span> <span class='hs-layout'>(</span><span class='hs-conid'>Foldable</span> <span class='hs-varid'>f</span><span class='hs-layout'>,</span> <span class='hs-conid'>MonadCatch</span> <span class='hs-varid'>m</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=></span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>f</span> <span class='hs-layout'>(</span><span class='hs-conid'>Handler</span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span> -<a name="line-349"></a><span class='hs-definition'>catches</span> <span class='hs-varid'>a</span> <span class='hs-varid'>hs</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>a</span> <span class='hs-varop'>`catch`</span> <span class='hs-varid'>handler</span> -<a name="line-350"></a> <span class='hs-keyword'>where</span> -<a name="line-351"></a> <span class='hs-varid'>handler</span> <span class='hs-varid'>e</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>foldr</span> <span class='hs-varid'>probe</span> <span class='hs-layout'>(</span><span class='hs-varid'>throwM</span> <span class='hs-varid'>e</span><span class='hs-layout'>)</span> <span class='hs-varid'>hs</span> -<a name="line-352"></a> <span class='hs-keyword'>where</span> -<a name="line-353"></a> <span class='hs-varid'>probe</span> <span class='hs-layout'>(</span><span class='hs-conid'>Handler</span> <span class='hs-varid'>h</span><span class='hs-layout'>)</span> <span class='hs-varid'>xs</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>maybe</span> <span class='hs-varid'>xs</span> <span class='hs-varid'>h</span> <span class='hs-layout'>(</span><span class='hs-conid'>ControlException</span><span class='hs-varop'>.</span><span class='hs-varid'>fromException</span> <span class='hs-varid'>e</span><span class='hs-layout'>)</span> -<a name="line-354"></a> -<a name="line-355"></a><a name="onException"></a><span class='hs-comment'>-- | Run an action only if an exception is thrown in the main action. The</span> -<a name="line-356"></a><span class='hs-comment'>-- exception is not caught, simply rethrown.</span> -<a name="line-357"></a><span class='hs-definition'>onException</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>MonadCatch</span> <span class='hs-varid'>m</span> <span class='hs-keyglyph'>=></span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>m</span> <span class='hs-varid'>b</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span> -<a name="line-358"></a><span class='hs-definition'>onException</span> <span class='hs-varid'>action</span> <span class='hs-varid'>handler</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>action</span> <span class='hs-varop'>`catchAll`</span> <span class='hs-keyglyph'>\</span><span class='hs-varid'>e</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>handler</span> <span class='hs-varop'>>></span> <span class='hs-varid'>throwM</span> <span class='hs-varid'>e</span> -<a name="line-359"></a> -<a name="line-360"></a><a name="bracket"></a><span class='hs-comment'>-- | Generalized abstracted pattern of safe resource acquisition and release</span> -<a name="line-361"></a><span class='hs-comment'>-- in the face of exceptions. The first action \"acquires\" some value, which</span> -<a name="line-362"></a><span class='hs-comment'>-- is \"released\" by the second action at the end. The third action \"uses\"</span> -<a name="line-363"></a><span class='hs-comment'>-- the value and its result is the result of the 'bracket'.</span> -<a name="line-364"></a><span class='hs-comment'>--</span> -<a name="line-365"></a><span class='hs-comment'>-- If an exception occurs during the use, the release still happens before the</span> -<a name="line-366"></a><span class='hs-comment'>-- exception is rethrown.</span> -<a name="line-367"></a><span class='hs-definition'>bracket</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>MonadCatch</span> <span class='hs-varid'>m</span> <span class='hs-keyglyph'>=></span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-></span> <span class='hs-layout'>(</span><span class='hs-varid'>a</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>m</span> <span class='hs-varid'>b</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-></span> <span class='hs-layout'>(</span><span class='hs-varid'>a</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>m</span> <span class='hs-varid'>c</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>m</span> <span class='hs-varid'>c</span> -<a name="line-368"></a><span class='hs-definition'>bracket</span> <span class='hs-varid'>acquire</span> <span class='hs-varid'>release</span> <span class='hs-varid'>use</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>mask</span> <span class='hs-varop'>$</span> <span class='hs-keyglyph'>\</span><span class='hs-varid'>unmasked</span> <span class='hs-keyglyph'>-></span> <span class='hs-keyword'>do</span> -<a name="line-369"></a> <span class='hs-varid'>resource</span> <span class='hs-keyglyph'><-</span> <span class='hs-varid'>acquire</span> -<a name="line-370"></a> <span class='hs-varid'>result</span> <span class='hs-keyglyph'><-</span> <span class='hs-varid'>unmasked</span> <span class='hs-layout'>(</span><span class='hs-varid'>use</span> <span class='hs-varid'>resource</span><span class='hs-layout'>)</span> <span class='hs-varop'>`onException`</span> <span class='hs-varid'>release</span> <span class='hs-varid'>resource</span> -<a name="line-371"></a> <span class='hs-keyword'>_</span> <span class='hs-keyglyph'><-</span> <span class='hs-varid'>release</span> <span class='hs-varid'>resource</span> -<a name="line-372"></a> <span class='hs-varid'>return</span> <span class='hs-varid'>result</span> +<a name="line-335"></a><span class='hs-comment'>------------------------------------------------------------------------------</span> +<a name="line-336"></a><span class='hs-comment'>-- $utilities</span> +<a name="line-337"></a><span class='hs-comment'>-- These functions follow those from "Control.Exception", except that they are</span> +<a name="line-338"></a><span class='hs-comment'>-- based on methods from the 'MonadCatch' typeclass. See</span> +<a name="line-339"></a><span class='hs-comment'>-- "Control.Exception" for API usage.</span> +<a name="line-340"></a><span class='hs-comment'>------------------------------------------------------------------------------</span> +<a name="line-341"></a> +<a name="line-342"></a><a name="mask_"></a><span class='hs-comment'>-- | Like 'mask', but does not pass a @restore@ action to the argument.</span> +<a name="line-343"></a><span class='hs-definition'>mask_</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>MonadMask</span> <span class='hs-varid'>m</span> <span class='hs-keyglyph'>=></span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span> +<a name="line-344"></a><span class='hs-definition'>mask_</span> <span class='hs-varid'>io</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>mask</span> <span class='hs-varop'>$</span> <span class='hs-keyglyph'>\</span><span class='hs-keyword'>_</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>io</span> +<a name="line-345"></a> +<a name="line-346"></a><a name="uninterruptibleMask_"></a><span class='hs-comment'>-- | Like 'uninterruptibleMask', but does not pass a @restore@ action to the</span> +<a name="line-347"></a><span class='hs-comment'>-- argument.</span> +<a name="line-348"></a><span class='hs-definition'>uninterruptibleMask_</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>MonadMask</span> <span class='hs-varid'>m</span> <span class='hs-keyglyph'>=></span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span> +<a name="line-349"></a><span class='hs-definition'>uninterruptibleMask_</span> <span class='hs-varid'>io</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>uninterruptibleMask</span> <span class='hs-varop'>$</span> <span class='hs-keyglyph'>\</span><span class='hs-keyword'>_</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>io</span> +<a name="line-350"></a> +<a name="line-351"></a><a name="catchAll"></a><span class='hs-comment'>-- | Catches all exceptions, and somewhat defeats the purpose of the extensible</span> +<a name="line-352"></a><span class='hs-comment'>-- exception system. Use sparingly.</span> +<a name="line-353"></a><span class='hs-definition'>catchAll</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>MonadCatch</span> <span class='hs-varid'>m</span> <span class='hs-keyglyph'>=></span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-></span> <span class='hs-layout'>(</span><span class='hs-conid'>SomeException</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span> +<a name="line-354"></a><span class='hs-definition'>catchAll</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>catch</span> +<a name="line-355"></a> +<a name="line-356"></a><a name="catchIOError"></a><span class='hs-comment'>-- | Catch all 'IOError' (eqv. 'IOException') exceptions. Still somewhat too</span> +<a name="line-357"></a><span class='hs-comment'>-- general, but better than using 'catchAll'. See 'catchIf' for an easy way</span> +<a name="line-358"></a><span class='hs-comment'>-- of catching specific 'IOError's based on the predicates in "System.IO.Error".</span> +<a name="line-359"></a><span class='hs-definition'>catchIOError</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>MonadCatch</span> <span class='hs-varid'>m</span> <span class='hs-keyglyph'>=></span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-></span> <span class='hs-layout'>(</span><span class='hs-conid'>IOError</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span> +<a name="line-360"></a><span class='hs-definition'>catchIOError</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>catch</span> +<a name="line-361"></a> +<a name="line-362"></a><a name="catchIf"></a><span class='hs-comment'>-- | Catch exceptions only if they pass some predicate. Often useful with the</span> +<a name="line-363"></a><span class='hs-comment'>-- predicates for testing 'IOError' values in "System.IO.Error".</span> +<a name="line-364"></a><span class='hs-definition'>catchIf</span> <span class='hs-keyglyph'>::</span> <span class='hs-layout'>(</span><span class='hs-conid'>MonadCatch</span> <span class='hs-varid'>m</span><span class='hs-layout'>,</span> <span class='hs-conid'>Exception</span> <span class='hs-varid'>e</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=></span> +<a name="line-365"></a> <span class='hs-layout'>(</span><span class='hs-varid'>e</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>Bool</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-></span> <span class='hs-layout'>(</span><span class='hs-varid'>e</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span> +<a name="line-366"></a><span class='hs-definition'>catchIf</span> <span class='hs-varid'>f</span> <span class='hs-varid'>a</span> <span class='hs-varid'>b</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>a</span> <span class='hs-varop'>`catch`</span> <span class='hs-keyglyph'>\</span><span class='hs-varid'>e</span> <span class='hs-keyglyph'>-></span> <span class='hs-keyword'>if</span> <span class='hs-varid'>f</span> <span class='hs-varid'>e</span> <span class='hs-keyword'>then</span> <span class='hs-varid'>b</span> <span class='hs-varid'>e</span> <span class='hs-keyword'>else</span> <span class='hs-varid'>throwM</span> <span class='hs-varid'>e</span> +<a name="line-367"></a> +<a name="line-368"></a><a name="catchJust"></a><span class='hs-comment'>-- | A more generalized way of determining which exceptions to catch at</span> +<a name="line-369"></a><span class='hs-comment'>-- run time.</span> +<a name="line-370"></a><span class='hs-definition'>catchJust</span> <span class='hs-keyglyph'>::</span> <span class='hs-layout'>(</span><span class='hs-conid'>MonadCatch</span> <span class='hs-varid'>m</span><span class='hs-layout'>,</span> <span class='hs-conid'>Exception</span> <span class='hs-varid'>e</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=></span> +<a name="line-371"></a> <span class='hs-layout'>(</span><span class='hs-varid'>e</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>Maybe</span> <span class='hs-varid'>b</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-></span> <span class='hs-layout'>(</span><span class='hs-varid'>b</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span> +<a name="line-372"></a><span class='hs-definition'>catchJust</span> <span class='hs-varid'>f</span> <span class='hs-varid'>a</span> <span class='hs-varid'>b</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>a</span> <span class='hs-varop'>`catch`</span> <span class='hs-keyglyph'>\</span><span class='hs-varid'>e</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>maybe</span> <span class='hs-layout'>(</span><span class='hs-varid'>throwM</span> <span class='hs-varid'>e</span><span class='hs-layout'>)</span> <span class='hs-varid'>b</span> <span class='hs-varop'>$</span> <span class='hs-varid'>f</span> <span class='hs-varid'>e</span> <a name="line-373"></a> -<a name="line-374"></a><a name="bracket_"></a><span class='hs-comment'>-- | Version of 'bracket' without any value being passed to the second and</span> -<a name="line-375"></a><span class='hs-comment'>-- third actions.</span> -<a name="line-376"></a><span class='hs-definition'>bracket_</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>MonadCatch</span> <span class='hs-varid'>m</span> <span class='hs-keyglyph'>=></span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>m</span> <span class='hs-varid'>b</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>m</span> <span class='hs-varid'>c</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>m</span> <span class='hs-varid'>c</span> -<a name="line-377"></a><span class='hs-definition'>bracket_</span> <span class='hs-varid'>before</span> <span class='hs-varid'>after</span> <span class='hs-varid'>action</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>bracket</span> <span class='hs-varid'>before</span> <span class='hs-layout'>(</span><span class='hs-varid'>const</span> <span class='hs-varid'>after</span><span class='hs-layout'>)</span> <span class='hs-layout'>(</span><span class='hs-varid'>const</span> <span class='hs-varid'>action</span><span class='hs-layout'>)</span> +<a name="line-374"></a><a name="handle"></a><span class='hs-comment'>-- | Flipped 'catch'. See "Control.Exception"'s 'ControlException.handle'.</span> +<a name="line-375"></a><span class='hs-definition'>handle</span> <span class='hs-keyglyph'>::</span> <span class='hs-layout'>(</span><span class='hs-conid'>MonadCatch</span> <span class='hs-varid'>m</span><span class='hs-layout'>,</span> <span class='hs-conid'>Exception</span> <span class='hs-varid'>e</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=></span> <span class='hs-layout'>(</span><span class='hs-varid'>e</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span> +<a name="line-376"></a><span class='hs-definition'>handle</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>flip</span> <span class='hs-varid'>catch</span> +<a name="line-377"></a><span class='hs-comment'>{-# INLINE handle #-}</span> <a name="line-378"></a> -<a name="line-379"></a><a name="finally"></a><span class='hs-comment'>-- | Perform an action with a finalizer action that is run, even if an</span> -<a name="line-380"></a><span class='hs-comment'>-- exception occurs.</span> -<a name="line-381"></a><span class='hs-definition'>finally</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>MonadCatch</span> <span class='hs-varid'>m</span> <span class='hs-keyglyph'>=></span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>m</span> <span class='hs-varid'>b</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span> -<a name="line-382"></a><span class='hs-definition'>finally</span> <span class='hs-varid'>action</span> <span class='hs-varid'>finalizer</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>bracket_</span> <span class='hs-layout'>(</span><span class='hs-varid'>return</span> <span class='hs-conid'>()</span><span class='hs-layout'>)</span> <span class='hs-varid'>finalizer</span> <span class='hs-varid'>action</span> -<a name="line-383"></a> -<a name="line-384"></a><a name="bracketOnError"></a><span class='hs-comment'>-- | Like 'bracket', but only performs the final action if there was an</span> -<a name="line-385"></a><span class='hs-comment'>-- exception raised by the in-between computation.</span> -<a name="line-386"></a><span class='hs-definition'>bracketOnError</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>MonadCatch</span> <span class='hs-varid'>m</span> <span class='hs-keyglyph'>=></span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-></span> <span class='hs-layout'>(</span><span class='hs-varid'>a</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>m</span> <span class='hs-varid'>b</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-></span> <span class='hs-layout'>(</span><span class='hs-varid'>a</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>m</span> <span class='hs-varid'>c</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>m</span> <span class='hs-varid'>c</span> -<a name="line-387"></a><span class='hs-definition'>bracketOnError</span> <span class='hs-varid'>acquire</span> <span class='hs-varid'>release</span> <span class='hs-varid'>use</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>mask</span> <span class='hs-varop'>$</span> <span class='hs-keyglyph'>\</span><span class='hs-varid'>unmasked</span> <span class='hs-keyglyph'>-></span> <span class='hs-keyword'>do</span> -<a name="line-388"></a> <span class='hs-varid'>resource</span> <span class='hs-keyglyph'><-</span> <span class='hs-varid'>acquire</span> -<a name="line-389"></a> <span class='hs-varid'>unmasked</span> <span class='hs-layout'>(</span><span class='hs-varid'>use</span> <span class='hs-varid'>resource</span><span class='hs-layout'>)</span> <span class='hs-varop'>`onException`</span> <span class='hs-varid'>release</span> <span class='hs-varid'>resource</span> +<a name="line-379"></a><a name="handleIOError"></a><span class='hs-comment'>-- | Flipped 'catchIOError'</span> +<a name="line-380"></a><span class='hs-definition'>handleIOError</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>MonadCatch</span> <span class='hs-varid'>m</span> <span class='hs-keyglyph'>=></span> <span class='hs-layout'>(</span><span class='hs-conid'>IOError</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span> +<a name="line-381"></a><span class='hs-definition'>handleIOError</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>handle</span> +<a name="line-382"></a> +<a name="line-383"></a><a name="handleAll"></a><span class='hs-comment'>-- | Flipped 'catchAll'</span> +<a name="line-384"></a><span class='hs-definition'>handleAll</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>MonadCatch</span> <span class='hs-varid'>m</span> <span class='hs-keyglyph'>=></span> <span class='hs-layout'>(</span><span class='hs-conid'>SomeException</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span> +<a name="line-385"></a><span class='hs-definition'>handleAll</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>handle</span> +<a name="line-386"></a> +<a name="line-387"></a><a name="handleIf"></a><span class='hs-comment'>-- | Flipped 'catchIf'</span> +<a name="line-388"></a><span class='hs-definition'>handleIf</span> <span class='hs-keyglyph'>::</span> <span class='hs-layout'>(</span><span class='hs-conid'>MonadCatch</span> <span class='hs-varid'>m</span><span class='hs-layout'>,</span> <span class='hs-conid'>Exception</span> <span class='hs-varid'>e</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=></span> <span class='hs-layout'>(</span><span class='hs-varid'>e</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>Bool</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-></span> <span class='hs-layout'>(</span><span class='hs-varid'>e</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span> +<a name="line-389"></a><span class='hs-definition'>handleIf</span> <span class='hs-varid'>f</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>flip</span> <span class='hs-layout'>(</span><span class='hs-varid'>catchIf</span> <span class='hs-varid'>f</span><span class='hs-layout'>)</span> +<a name="line-390"></a> +<a name="line-391"></a><a name="handleJust"></a><span class='hs-comment'>-- | Flipped 'catchJust'. See "Control.Exception"'s 'ControlException.handleJust'.</span> +<a name="line-392"></a><span class='hs-definition'>handleJust</span> <span class='hs-keyglyph'>::</span> <span class='hs-layout'>(</span><span class='hs-conid'>MonadCatch</span> <span class='hs-varid'>m</span><span class='hs-layout'>,</span> <span class='hs-conid'>Exception</span> <span class='hs-varid'>e</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=></span> <span class='hs-layout'>(</span><span class='hs-varid'>e</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>Maybe</span> <span class='hs-varid'>b</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-></span> <span class='hs-layout'>(</span><span class='hs-varid'>b</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span> +<a name="line-393"></a><span class='hs-definition'>handleJust</span> <span class='hs-varid'>f</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>flip</span> <span class='hs-layout'>(</span><span class='hs-varid'>catchJust</span> <span class='hs-varid'>f</span><span class='hs-layout'>)</span> +<a name="line-394"></a><span class='hs-comment'>{-# INLINE handleJust #-}</span> +<a name="line-395"></a> +<a name="line-396"></a><a name="try"></a><span class='hs-comment'>-- | Similar to 'catch', but returns an 'Either' result. See "Control.Exception"'s</span> +<a name="line-397"></a><span class='hs-comment'>-- 'Control.Exception.try'.</span> +<a name="line-398"></a><span class='hs-definition'>try</span> <span class='hs-keyglyph'>::</span> <span class='hs-layout'>(</span><span class='hs-conid'>MonadCatch</span> <span class='hs-varid'>m</span><span class='hs-layout'>,</span> <span class='hs-conid'>Exception</span> <span class='hs-varid'>e</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=></span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>m</span> <span class='hs-layout'>(</span><span class='hs-conid'>Either</span> <span class='hs-varid'>e</span> <span class='hs-varid'>a</span><span class='hs-layout'>)</span> +<a name="line-399"></a><span class='hs-definition'>try</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>catch</span> <span class='hs-layout'>(</span><span class='hs-conid'>Right</span> <span class='hs-varop'>`liftM`</span> <span class='hs-varid'>a</span><span class='hs-layout'>)</span> <span class='hs-layout'>(</span><span class='hs-varid'>return</span> <span class='hs-varop'>.</span> <span class='hs-conid'>Left</span><span class='hs-layout'>)</span> +<a name="line-400"></a> +<a name="line-401"></a><a name="tryJust"></a><span class='hs-comment'>-- | A variant of 'try' that takes an exception predicate to select</span> +<a name="line-402"></a><span class='hs-comment'>-- which exceptions are caught. See "Control.Exception"'s 'ControlException.tryJust'</span> +<a name="line-403"></a><span class='hs-definition'>tryJust</span> <span class='hs-keyglyph'>::</span> <span class='hs-layout'>(</span><span class='hs-conid'>MonadCatch</span> <span class='hs-varid'>m</span><span class='hs-layout'>,</span> <span class='hs-conid'>Exception</span> <span class='hs-varid'>e</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=></span> +<a name="line-404"></a> <span class='hs-layout'>(</span><span class='hs-varid'>e</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>Maybe</span> <span class='hs-varid'>b</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>m</span> <span class='hs-layout'>(</span><span class='hs-conid'>Either</span> <span class='hs-varid'>b</span> <span class='hs-varid'>a</span><span class='hs-layout'>)</span> +<a name="line-405"></a><span class='hs-definition'>tryJust</span> <span class='hs-varid'>f</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>catch</span> <span class='hs-layout'>(</span><span class='hs-conid'>Right</span> <span class='hs-varop'>`liftM`</span> <span class='hs-varid'>a</span><span class='hs-layout'>)</span> <span class='hs-layout'>(</span><span class='hs-keyglyph'>\</span><span class='hs-varid'>e</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>maybe</span> <span class='hs-layout'>(</span><span class='hs-varid'>throwM</span> <span class='hs-varid'>e</span><span class='hs-layout'>)</span> <span class='hs-layout'>(</span><span class='hs-varid'>return</span> <span class='hs-varop'>.</span> <span class='hs-conid'>Left</span><span class='hs-layout'>)</span> <span class='hs-layout'>(</span><span class='hs-varid'>f</span> <span class='hs-varid'>e</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span> +<a name="line-406"></a> +<a name="line-407"></a><a name="Handler"></a><span class='hs-comment'>-- | Generalized version of 'ControlException.Handler'</span> +<a name="line-408"></a><a name="Handler"></a><span class='hs-keyword'>data</span> <span class='hs-conid'>Handler</span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>=</span> <span class='hs-keyword'>forall</span> <span class='hs-varid'>e</span> <span class='hs-varop'>.</span> <span class='hs-conid'>ControlException</span><span class='hs-varop'>.</span><span class='hs-conid'>Exception</span> <span class='hs-varid'>e</span> <span class='hs-keyglyph'>=></span> <span class='hs-conid'>Handler</span> <span class='hs-layout'>(</span><span class='hs-varid'>e</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span><span class='hs-layout'>)</span> +<a name="line-409"></a> +<a name="line-410"></a><a name="instance%20Functor%20(Handler%20m)"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>Monad</span> <span class='hs-varid'>m</span> <span class='hs-keyglyph'>=></span> <span class='hs-conid'>Functor</span> <span class='hs-layout'>(</span><span class='hs-conid'>Handler</span> <span class='hs-varid'>m</span><span class='hs-layout'>)</span> <span class='hs-keyword'>where</span> +<a name="line-411"></a> <span class='hs-varid'>fmap</span> <span class='hs-varid'>f</span> <span class='hs-layout'>(</span><span class='hs-conid'>Handler</span> <span class='hs-varid'>h</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Handler</span> <span class='hs-layout'>(</span><span class='hs-varid'>liftM</span> <span class='hs-varid'>f</span> <span class='hs-varop'>.</span> <span class='hs-varid'>h</span><span class='hs-layout'>)</span> +<a name="line-412"></a> +<a name="line-413"></a><a name="catches"></a><span class='hs-comment'>-- | Catches different sorts of exceptions. See "Control.Exception"'s 'ControlException.catches'</span> +<a name="line-414"></a><span class='hs-definition'>catches</span> <span class='hs-keyglyph'>::</span> <span class='hs-layout'>(</span><span class='hs-conid'>Foldable</span> <span class='hs-varid'>f</span><span class='hs-layout'>,</span> <span class='hs-conid'>MonadCatch</span> <span class='hs-varid'>m</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=></span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>f</span> <span class='hs-layout'>(</span><span class='hs-conid'>Handler</span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span> +<a name="line-415"></a><span class='hs-definition'>catches</span> <span class='hs-varid'>a</span> <span class='hs-varid'>hs</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>a</span> <span class='hs-varop'>`catch`</span> <span class='hs-varid'>handler</span> +<a name="line-416"></a> <span class='hs-keyword'>where</span> +<a name="line-417"></a> <span class='hs-varid'>handler</span> <span class='hs-varid'>e</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>foldr</span> <span class='hs-varid'>probe</span> <span class='hs-layout'>(</span><span class='hs-varid'>throwM</span> <span class='hs-varid'>e</span><span class='hs-layout'>)</span> <span class='hs-varid'>hs</span> +<a name="line-418"></a> <span class='hs-keyword'>where</span> +<a name="line-419"></a> <span class='hs-varid'>probe</span> <span class='hs-layout'>(</span><span class='hs-conid'>Handler</span> <span class='hs-varid'>h</span><span class='hs-layout'>)</span> <span class='hs-varid'>xs</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>maybe</span> <span class='hs-varid'>xs</span> <span class='hs-varid'>h</span> <span class='hs-layout'>(</span><span class='hs-conid'>ControlException</span><span class='hs-varop'>.</span><span class='hs-varid'>fromException</span> <span class='hs-varid'>e</span><span class='hs-layout'>)</span> +<a name="line-420"></a> +<a name="line-421"></a><a name="onException"></a><span class='hs-comment'>-- | Run an action only if an exception is thrown in the main action. The</span> +<a name="line-422"></a><span class='hs-comment'>-- exception is not caught, simply rethrown.</span> +<a name="line-423"></a><span class='hs-definition'>onException</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>MonadCatch</span> <span class='hs-varid'>m</span> <span class='hs-keyglyph'>=></span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>m</span> <span class='hs-varid'>b</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span> +<a name="line-424"></a><span class='hs-definition'>onException</span> <span class='hs-varid'>action</span> <span class='hs-varid'>handler</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>action</span> <span class='hs-varop'>`catchAll`</span> <span class='hs-keyglyph'>\</span><span class='hs-varid'>e</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>handler</span> <span class='hs-varop'>>></span> <span class='hs-varid'>throwM</span> <span class='hs-varid'>e</span> +<a name="line-425"></a> +<a name="line-426"></a><a name="bracket"></a><span class='hs-comment'>-- | Generalized abstracted pattern of safe resource acquisition and release</span> +<a name="line-427"></a><span class='hs-comment'>-- in the face of exceptions. The first action \"acquires\" some value, which</span> +<a name="line-428"></a><span class='hs-comment'>-- is \"released\" by the second action at the end. The third action \"uses\"</span> +<a name="line-429"></a><span class='hs-comment'>-- the value and its result is the result of the 'bracket'.</span> +<a name="line-430"></a><span class='hs-comment'>--</span> +<a name="line-431"></a><span class='hs-comment'>-- If an exception occurs during the use, the release still happens before the</span> +<a name="line-432"></a><span class='hs-comment'>-- exception is rethrown.</span> +<a name="line-433"></a><span class='hs-definition'>bracket</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>MonadMask</span> <span class='hs-varid'>m</span> <span class='hs-keyglyph'>=></span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-></span> <span class='hs-layout'>(</span><span class='hs-varid'>a</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>m</span> <span class='hs-varid'>b</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-></span> <span class='hs-layout'>(</span><span class='hs-varid'>a</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>m</span> <span class='hs-varid'>c</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>m</span> <span class='hs-varid'>c</span> +<a name="line-434"></a><span class='hs-definition'>bracket</span> <span class='hs-varid'>acquire</span> <span class='hs-varid'>release</span> <span class='hs-varid'>use</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>mask</span> <span class='hs-varop'>$</span> <span class='hs-keyglyph'>\</span><span class='hs-varid'>unmasked</span> <span class='hs-keyglyph'>-></span> <span class='hs-keyword'>do</span> +<a name="line-435"></a> <span class='hs-varid'>resource</span> <span class='hs-keyglyph'><-</span> <span class='hs-varid'>acquire</span> +<a name="line-436"></a> <span class='hs-varid'>result</span> <span class='hs-keyglyph'><-</span> <span class='hs-varid'>unmasked</span> <span class='hs-layout'>(</span><span class='hs-varid'>use</span> <span class='hs-varid'>resource</span><span class='hs-layout'>)</span> <span class='hs-varop'>`onException`</span> <span class='hs-varid'>release</span> <span class='hs-varid'>resource</span> +<a name="line-437"></a> <span class='hs-keyword'>_</span> <span class='hs-keyglyph'><-</span> <span class='hs-varid'>release</span> <span class='hs-varid'>resource</span> +<a name="line-438"></a> <span class='hs-varid'>return</span> <span class='hs-varid'>result</span> +<a name="line-439"></a> +<a name="line-440"></a><a name="bracket_"></a><span class='hs-comment'>-- | Version of 'bracket' without any value being passed to the second and</span> +<a name="line-441"></a><span class='hs-comment'>-- third actions.</span> +<a name="line-442"></a><span class='hs-definition'>bracket_</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>MonadMask</span> <span class='hs-varid'>m</span> <span class='hs-keyglyph'>=></span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>m</span> <span class='hs-varid'>b</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>m</span> <span class='hs-varid'>c</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>m</span> <span class='hs-varid'>c</span> +<a name="line-443"></a><span class='hs-definition'>bracket_</span> <span class='hs-varid'>before</span> <span class='hs-varid'>after</span> <span class='hs-varid'>action</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>bracket</span> <span class='hs-varid'>before</span> <span class='hs-layout'>(</span><span class='hs-varid'>const</span> <span class='hs-varid'>after</span><span class='hs-layout'>)</span> <span class='hs-layout'>(</span><span class='hs-varid'>const</span> <span class='hs-varid'>action</span><span class='hs-layout'>)</span> +<a name="line-444"></a> +<a name="line-445"></a><a name="finally"></a><span class='hs-comment'>-- | Perform an action with a finalizer action that is run, even if an</span> +<a name="line-446"></a><span class='hs-comment'>-- exception occurs.</span> +<a name="line-447"></a><span class='hs-definition'>finally</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>MonadMask</span> <span class='hs-varid'>m</span> <span class='hs-keyglyph'>=></span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>m</span> <span class='hs-varid'>b</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span> +<a name="line-448"></a><span class='hs-definition'>finally</span> <span class='hs-varid'>action</span> <span class='hs-varid'>finalizer</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>bracket_</span> <span class='hs-layout'>(</span><span class='hs-varid'>return</span> <span class='hs-conid'>()</span><span class='hs-layout'>)</span> <span class='hs-varid'>finalizer</span> <span class='hs-varid'>action</span> +<a name="line-449"></a> +<a name="line-450"></a><a name="bracketOnError"></a><span class='hs-comment'>-- | Like 'bracket', but only performs the final action if there was an</span> +<a name="line-451"></a><span class='hs-comment'>-- exception raised by the in-between computation.</span> +<a name="line-452"></a><span class='hs-definition'>bracketOnError</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>MonadMask</span> <span class='hs-varid'>m</span> <span class='hs-keyglyph'>=></span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-></span> <span class='hs-layout'>(</span><span class='hs-varid'>a</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>m</span> <span class='hs-varid'>b</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-></span> <span class='hs-layout'>(</span><span class='hs-varid'>a</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>m</span> <span class='hs-varid'>c</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>m</span> <span class='hs-varid'>c</span> +<a name="line-453"></a><span class='hs-definition'>bracketOnError</span> <span class='hs-varid'>acquire</span> <span class='hs-varid'>release</span> <span class='hs-varid'>use</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>mask</span> <span class='hs-varop'>$</span> <span class='hs-keyglyph'>\</span><span class='hs-varid'>unmasked</span> <span class='hs-keyglyph'>-></span> <span class='hs-keyword'>do</span> +<a name="line-454"></a> <span class='hs-varid'>resource</span> <span class='hs-keyglyph'><-</span> <span class='hs-varid'>acquire</span> +<a name="line-455"></a> <span class='hs-varid'>unmasked</span> <span class='hs-layout'>(</span><span class='hs-varid'>use</span> <span class='hs-varid'>resource</span><span class='hs-layout'>)</span> <span class='hs-varop'>`onException`</span> <span class='hs-varid'>release</span> <span class='hs-varid'>resource</span> </pre></body> </html>