/usr/share/doc/libghc-resourcet-doc/html/Control-Monad-Trans-Resource.html is in libghc-resourcet-doc 0.4.7.1-1build1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 | <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Control.Monad.Trans.Resource</title><link href="ocean.css" rel="stylesheet" type="text/css" title="Ocean" /><script src="haddock-util.js" type="text/javascript"></script><script type="text/javascript">//<![CDATA[
window.onload = function () {pageLoad();setSynopsis("mini_Control-Monad-Trans-Resource.html");};
//]]>
</script></head><body><div id="package-header"><ul class="links" id="page-menu"><li><a href="src/Control-Monad-Trans-Resource.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">resourcet-0.4.7.1: Deterministic allocation and freeing of scarce resources.</p></div><div id="content"><div id="module-header"><table class="info"><tr><th>Safe Haskell</th><td>None</td></tr></table><p class="caption">Control.Monad.Trans.Resource</p></div><div id="table-of-contents"><p class="caption">Contents</p><ul><li><a href="#g:1">Data types
</a></li><li><a href="#g:2">Unwrap
</a></li><li><a href="#g:3">Special actions
</a></li><li><a href="#g:4">Monad transformation
</a></li><li><a href="#g:5">A specific Exception transformer
</a></li><li><a href="#g:6">Registering/releasing
</a></li><li><a href="#g:7">Type class/associated types
</a><ul><li><a href="#g:8">Low-level
</a></li></ul></li><li><a href="#g:9">Re-exports
</a></li><li><a href="#g:10">Internal state
</a></li></ul></div><div id="description"><p class="caption">Description</p><div class="doc"><p>Allocate resources which are guaranteed to be released.
</p><p>For more information, see <a href="http://www.yesodweb.com/book/conduits">http://www.yesodweb.com/book/conduits</a>.
</p><p>One point to note: all register cleanup actions live in the <code>IO</code> monad, not
the main monad. This allows both more efficient code, and for monads to be
transformed.
</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">data</span> <a href="#t:ResourceT">ResourceT</a> m a</li><li class="src short"><span class="keyword">type</span> <a href="#t:ResIO">ResIO</a> a = <a href="Control-Monad-Trans-Resource.html#t:ResourceT">ResourceT</a> <a href="/usr/share/doc/ghc-doc/html/libraries/base-4.6.0.1/System-IO.html#t:IO">IO</a> a</li><li class="src short"><span class="keyword">data</span> <a href="#t:ReleaseKey">ReleaseKey</a> </li><li class="src short"><a href="#v:runResourceT">runResourceT</a> :: <a href="Control-Monad-Trans-Resource.html#t:MonadBaseControl">MonadBaseControl</a> <a href="/usr/share/doc/ghc-doc/html/libraries/base-4.6.0.1/System-IO.html#t:IO">IO</a> m => <a href="Control-Monad-Trans-Resource.html#t:ResourceT">ResourceT</a> m a -> m a</li><li class="src short"><a href="#v:resourceForkIO">resourceForkIO</a> :: <a href="Control-Monad-Trans-Resource.html#t:MonadBaseControl">MonadBaseControl</a> <a href="/usr/share/doc/ghc-doc/html/libraries/base-4.6.0.1/System-IO.html#t:IO">IO</a> m => <a href="Control-Monad-Trans-Resource.html#t:ResourceT">ResourceT</a> m () -> <a href="Control-Monad-Trans-Resource.html#t:ResourceT">ResourceT</a> m <a href="/usr/share/doc/ghc-doc/html/libraries/base-4.6.0.1/Control-Concurrent.html#t:ThreadId">ThreadId</a></li><li class="src short"><a href="#v:transResourceT">transResourceT</a> :: (m a -> n b) -> <a href="Control-Monad-Trans-Resource.html#t:ResourceT">ResourceT</a> m a -> <a href="Control-Monad-Trans-Resource.html#t:ResourceT">ResourceT</a> n b</li><li class="src short"><a href="#v:joinResourceT">joinResourceT</a> :: <a href="Control-Monad-Trans-Resource.html#t:ResourceT">ResourceT</a> (<a href="Control-Monad-Trans-Resource.html#t:ResourceT">ResourceT</a> m) a -> <a href="Control-Monad-Trans-Resource.html#t:ResourceT">ResourceT</a> m a</li><li class="src short"><span class="keyword">newtype</span> <a href="#t:ExceptionT">ExceptionT</a> m a = <a href="#v:ExceptionT">ExceptionT</a> {<ul class="subs"><li><a href="#v:runExceptionT">runExceptionT</a> :: m (<a href="/usr/share/doc/ghc-doc/html/libraries/base-4.6.0.1/Data-Either.html#t:Either">Either</a> <a href="/usr/share/doc/ghc-doc/html/libraries/base-4.6.0.1/Control-Exception-Base.html#t:SomeException">SomeException</a> a)</li></ul>}</li><li class="src short"><a href="#v:runExceptionT_">runExceptionT_</a> :: <a href="/usr/share/doc/ghc-doc/html/libraries/base-4.6.0.1/Control-Monad.html#t:Monad">Monad</a> m => <a href="Control-Monad-Trans-Resource.html#t:ExceptionT">ExceptionT</a> m a -> m a</li><li class="src short"><a href="#v:runException">runException</a> :: <a href="Control-Monad-Trans-Resource.html#t:ExceptionT">ExceptionT</a> <a href="/usr/share/doc/libghc-transformers-doc/html/Data-Functor-Identity.html#t:Identity">Identity</a> a -> <a href="/usr/share/doc/ghc-doc/html/libraries/base-4.6.0.1/Data-Either.html#t:Either">Either</a> <a href="/usr/share/doc/ghc-doc/html/libraries/base-4.6.0.1/Control-Exception-Base.html#t:SomeException">SomeException</a> a</li><li class="src short"><a href="#v:runException_">runException_</a> :: <a href="Control-Monad-Trans-Resource.html#t:ExceptionT">ExceptionT</a> <a href="/usr/share/doc/libghc-transformers-doc/html/Data-Functor-Identity.html#t:Identity">Identity</a> a -> a</li><li class="src short"><a href="#v:allocate">allocate</a> :: <a href="Control-Monad-Trans-Resource.html#t:MonadResource">MonadResource</a> m => <a href="/usr/share/doc/ghc-doc/html/libraries/base-4.6.0.1/System-IO.html#t:IO">IO</a> a -> (a -> <a href="/usr/share/doc/ghc-doc/html/libraries/base-4.6.0.1/System-IO.html#t:IO">IO</a> ()) -> m (<a href="Control-Monad-Trans-Resource.html#t:ReleaseKey">ReleaseKey</a>, a)</li><li class="src short"><a href="#v:register">register</a> :: <a href="Control-Monad-Trans-Resource.html#t:MonadResource">MonadResource</a> m => <a href="/usr/share/doc/ghc-doc/html/libraries/base-4.6.0.1/System-IO.html#t:IO">IO</a> () -> m <a href="Control-Monad-Trans-Resource.html#t:ReleaseKey">ReleaseKey</a></li><li class="src short"><a href="#v:release">release</a> :: <a href="/usr/share/doc/libghc-transformers-doc/html/Control-Monad-IO-Class.html#t:MonadIO">MonadIO</a> m => <a href="Control-Monad-Trans-Resource.html#t:ReleaseKey">ReleaseKey</a> -> m ()</li><li class="src short"><a href="#v:unprotect">unprotect</a> :: <a href="/usr/share/doc/libghc-transformers-doc/html/Control-Monad-IO-Class.html#t:MonadIO">MonadIO</a> m => <a href="Control-Monad-Trans-Resource.html#t:ReleaseKey">ReleaseKey</a> -> m (<a href="/usr/share/doc/ghc-doc/html/libraries/base-4.6.0.1/Data-Maybe.html#t:Maybe">Maybe</a> (<a href="/usr/share/doc/ghc-doc/html/libraries/base-4.6.0.1/System-IO.html#t:IO">IO</a> ()))</li><li class="src short"><a href="#v:resourceMask">resourceMask</a> :: <a href="Control-Monad-Trans-Resource.html#t:MonadResource">MonadResource</a> m => ((<span class="keyword">forall</span> a. <a href="Control-Monad-Trans-Resource.html#t:ResourceT">ResourceT</a> <a href="/usr/share/doc/ghc-doc/html/libraries/base-4.6.0.1/System-IO.html#t:IO">IO</a> a -> <a href="Control-Monad-Trans-Resource.html#t:ResourceT">ResourceT</a> <a href="/usr/share/doc/ghc-doc/html/libraries/base-4.6.0.1/System-IO.html#t:IO">IO</a> a) -> <a href="Control-Monad-Trans-Resource.html#t:ResourceT">ResourceT</a> <a href="/usr/share/doc/ghc-doc/html/libraries/base-4.6.0.1/System-IO.html#t:IO">IO</a> b) -> m b</li><li class="src short"><span class="keyword">class</span> (<a href="Control-Monad-Trans-Resource.html#t:MonadThrow">MonadThrow</a> m, <a href="Control-Monad-Trans-Resource.html#t:MonadUnsafeIO">MonadUnsafeIO</a> m, <a href="/usr/share/doc/libghc-transformers-doc/html/Control-Monad-IO-Class.html#t:MonadIO">MonadIO</a> m, <a href="/usr/share/doc/ghc-doc/html/libraries/base-4.6.0.1/Control-Applicative.html#t:Applicative">Applicative</a> m) => <a href="#t:MonadResource">MonadResource</a> m <span class="keyword">where</span><ul class="subs"><li><a href="#v:liftResourceT">liftResourceT</a> :: <a href="Control-Monad-Trans-Resource.html#t:ResourceT">ResourceT</a> <a href="/usr/share/doc/ghc-doc/html/libraries/base-4.6.0.1/System-IO.html#t:IO">IO</a> a -> m a</li></ul></li><li class="src short"><span class="keyword">class</span> <a href="/usr/share/doc/ghc-doc/html/libraries/base-4.6.0.1/Control-Monad.html#t:Monad">Monad</a> m => <a href="#t:MonadUnsafeIO">MonadUnsafeIO</a> m <span class="keyword">where</span><ul class="subs"><li><a href="#v:unsafeLiftIO">unsafeLiftIO</a> :: <a href="/usr/share/doc/ghc-doc/html/libraries/base-4.6.0.1/System-IO.html#t:IO">IO</a> a -> m a</li></ul></li><li class="src short"><span class="keyword">class</span> <a href="/usr/share/doc/ghc-doc/html/libraries/base-4.6.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:monadThrow">monadThrow</a> :: <a href="/usr/share/doc/ghc-doc/html/libraries/base-4.6.0.1/Control-Exception-Base.html#t:Exception">Exception</a> e => e -> m a</li></ul></li><li class="src short"><span class="keyword">class</span> <a href="/usr/share/doc/ghc-doc/html/libraries/base-4.6.0.1/Control-Monad.html#t:Monad">Monad</a> m => <a href="#t:MonadActive">MonadActive</a> m <span class="keyword">where</span><ul class="subs"><li><a href="#v:monadActive">monadActive</a> :: m <a href="/usr/share/doc/ghc-doc/html/libraries/base-4.6.0.1/Data-Bool.html#t:Bool">Bool</a></li></ul></li><li class="src short"><span class="keyword">type</span> <a href="#t:MonadResourceBase">MonadResourceBase</a> m = (<a href="Control-Monad-Trans-Resource.html#t:MonadBaseControl">MonadBaseControl</a> <a href="/usr/share/doc/ghc-doc/html/libraries/base-4.6.0.1/System-IO.html#t:IO">IO</a> m, <a href="Control-Monad-Trans-Resource.html#t:MonadThrow">MonadThrow</a> m, <a href="Control-Monad-Trans-Resource.html#t:MonadUnsafeIO">MonadUnsafeIO</a> m, <a href="/usr/share/doc/libghc-transformers-doc/html/Control-Monad-IO-Class.html#t:MonadIO">MonadIO</a> m, <a href="/usr/share/doc/ghc-doc/html/libraries/base-4.6.0.1/Control-Applicative.html#t:Applicative">Applicative</a> m)</li><li class="src short"><span class="keyword">data</span> <a href="#t:InvalidAccess">InvalidAccess</a> = <a href="#v:InvalidAccess">InvalidAccess</a> {<ul class="subs"><li><a href="#v:functionName">functionName</a> :: <a href="/usr/share/doc/ghc-doc/html/libraries/base-4.6.0.1/Data-String.html#t:String">String</a></li></ul>}</li><li class="src short"><span class="keyword">class</span> <a href="/usr/share/doc/libghc-transformers-base-doc/html/Control-Monad-Base.html#t:MonadBase">MonadBase</a> b m => <a href="#t:MonadBaseControl">MonadBaseControl</a> b m | m -> b</li><li class="src short"><span class="keyword">type</span> <a href="#t:InternalState">InternalState</a> = <a href="/usr/share/doc/ghc-doc/html/libraries/base-4.6.0.1/Data-IORef.html#t:IORef">IORef</a> ReleaseMap</li><li class="src short"><a href="#v:getInternalState">getInternalState</a> :: <a href="/usr/share/doc/ghc-doc/html/libraries/base-4.6.0.1/Control-Monad.html#t:Monad">Monad</a> m => <a href="Control-Monad-Trans-Resource.html#t:ResourceT">ResourceT</a> m <a href="Control-Monad-Trans-Resource.html#t:InternalState">InternalState</a></li><li class="src short"><a href="#v:runInternalState">runInternalState</a> :: <a href="Control-Monad-Trans-Resource.html#t:ResourceT">ResourceT</a> m a -> <a href="Control-Monad-Trans-Resource.html#t:InternalState">InternalState</a> -> m a</li><li class="src short"><a href="#v:withInternalState">withInternalState</a> :: (<a href="Control-Monad-Trans-Resource.html#t:InternalState">InternalState</a> -> m a) -> <a href="Control-Monad-Trans-Resource.html#t:ResourceT">ResourceT</a> m a</li></ul></div><div id="interface"><h1 id="g:1">Data types
</h1><div class="top"><p class="src"><span class="keyword">data</span> <a name="t:ResourceT" class="def">ResourceT</a> m a <a href="src/Control-Monad-Trans-Resource.html#ResourceT" class="link">Source</a></p><div class="doc"><p>The Resource transformer. This transformer keeps track of all registered
actions, and calls them upon exit (via <code><a href="Control-Monad-Trans-Resource.html#v:runResourceT">runResourceT</a></code>). Actions may be
registered via <code><a href="Control-Monad-Trans-Resource.html#v:register">register</a></code>, or resources may be allocated atomically via
<code><a href="Control-Monad-Trans-Resource.html#v:allocate">allocate</a></code>. <code>allocate</code> corresponds closely to <code>bracket</code>.
</p><p>Releasing may be performed before exit via the <code><a href="Control-Monad-Trans-Resource.html#v:release">release</a></code> function. This is a
highly recommended optimization, as it will ensure that scarce resources are
freed early. Note that calling <code>release</code> will deregister the action, so that
a release action will only ever be called once.
</p><p>Since 0.3.0
</p></div><div class="subs instances"><p id="control.i:ResourceT" class="caption collapser" onclick="toggleSection('i:ResourceT')">Instances</p><div id="section.i:ResourceT" class="show"><table><tr><td class="src"><a href="/usr/share/doc/libghc-mmorph-doc/html/Control-Monad-Morph.html#t:MFunctor">MFunctor</a> <a href="Control-Monad-Trans-Resource.html#t:ResourceT">ResourceT</a></td><td class="doc"><p>Since 0.4.7
</p></td></tr><tr><td class="src"><a href="/usr/share/doc/libghc-mmorph-doc/html/Control-Monad-Morph.html#t:MMonad">MMonad</a> <a href="Control-Monad-Trans-Resource.html#t:ResourceT">ResourceT</a></td><td class="doc"><p>Since 0.4.7
</p></td></tr><tr><td class="src"><a href="/usr/share/doc/libghc-mmorph-doc/html/Control-Monad-Morph.html#t:MonadTrans">MonadTrans</a> <a href="Control-Monad-Trans-Resource.html#t:ResourceT">ResourceT</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a href="/usr/share/doc/libghc-monad-control-doc/html/Control-Monad-Trans-Control.html#t:MonadTransControl">MonadTransControl</a> <a href="Control-Monad-Trans-Resource.html#t:ResourceT">ResourceT</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a href="/usr/share/doc/libghc-mtl-doc/html/Control-Monad-RWS-Class.html#t:MonadRWS">MonadRWS</a> r w s m => <a href="/usr/share/doc/libghc-mtl-doc/html/Control-Monad-RWS-Class.html#t:MonadRWS">MonadRWS</a> r w s (<a href="Control-Monad-Trans-Resource.html#t:ResourceT">ResourceT</a> m)</td><td class="doc empty"> </td></tr><tr><td class="src"><a href="/usr/share/doc/libghc-transformers-base-doc/html/Control-Monad-Base.html#t:MonadBase">MonadBase</a> b m => <a href="/usr/share/doc/libghc-transformers-base-doc/html/Control-Monad-Base.html#t:MonadBase">MonadBase</a> b (<a href="Control-Monad-Trans-Resource.html#t:ResourceT">ResourceT</a> m)</td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Control-Monad-Trans-Resource.html#t:MonadBaseControl">MonadBaseControl</a> b m => <a href="Control-Monad-Trans-Resource.html#t:MonadBaseControl">MonadBaseControl</a> b (<a href="Control-Monad-Trans-Resource.html#t:ResourceT">ResourceT</a> m)</td><td class="doc empty"> </td></tr><tr><td class="src"><a href="/usr/share/doc/libghc-mtl-doc/html/Control-Monad-Error-Class.html#t:MonadError">MonadError</a> e m => <a href="/usr/share/doc/libghc-mtl-doc/html/Control-Monad-Error-Class.html#t:MonadError">MonadError</a> e (<a href="Control-Monad-Trans-Resource.html#t:ResourceT">ResourceT</a> m)</td><td class="doc empty"> </td></tr><tr><td class="src"><a href="/usr/share/doc/libghc-mtl-doc/html/Control-Monad-Reader-Class.html#t:MonadReader">MonadReader</a> r m => <a href="/usr/share/doc/libghc-mtl-doc/html/Control-Monad-Reader-Class.html#t:MonadReader">MonadReader</a> r (<a href="Control-Monad-Trans-Resource.html#t:ResourceT">ResourceT</a> m)</td><td class="doc empty"> </td></tr><tr><td class="src"><a href="/usr/share/doc/libghc-mtl-doc/html/Control-Monad-State-Class.html#t:MonadState">MonadState</a> s m => <a href="/usr/share/doc/libghc-mtl-doc/html/Control-Monad-State-Class.html#t:MonadState">MonadState</a> s (<a href="Control-Monad-Trans-Resource.html#t:ResourceT">ResourceT</a> m)</td><td class="doc empty"> </td></tr><tr><td class="src"><a href="/usr/share/doc/libghc-mtl-doc/html/Control-Monad-Writer-Class.html#t:MonadWriter">MonadWriter</a> w m => <a href="/usr/share/doc/libghc-mtl-doc/html/Control-Monad-Writer-Class.html#t:MonadWriter">MonadWriter</a> w (<a href="Control-Monad-Trans-Resource.html#t:ResourceT">ResourceT</a> m)</td><td class="doc empty"> </td></tr><tr><td class="src"><a href="/usr/share/doc/ghc-doc/html/libraries/base-4.6.0.1/Control-Monad.html#t:Monad">Monad</a> m => <a href="/usr/share/doc/ghc-doc/html/libraries/base-4.6.0.1/Control-Monad.html#t:Monad">Monad</a> (<a href="Control-Monad-Trans-Resource.html#t:ResourceT">ResourceT</a> m)</td><td class="doc empty"> </td></tr><tr><td class="src"><a href="/usr/share/doc/ghc-doc/html/libraries/base-4.6.0.1/Control-Monad.html#t:Functor">Functor</a> m => <a href="/usr/share/doc/ghc-doc/html/libraries/base-4.6.0.1/Control-Monad.html#t:Functor">Functor</a> (<a href="Control-Monad-Trans-Resource.html#t:ResourceT">ResourceT</a> m)</td><td class="doc empty"> </td></tr><tr><td class="src"><a href="/usr/share/doc/ghc-doc/html/libraries/base-4.6.0.1/Data-Typeable-Internal.html#t:Typeable1">Typeable1</a> m => <a href="/usr/share/doc/ghc-doc/html/libraries/base-4.6.0.1/Data-Typeable-Internal.html#t:Typeable1">Typeable1</a> (<a href="Control-Monad-Trans-Resource.html#t:ResourceT">ResourceT</a> m)</td><td class="doc empty"> </td></tr><tr><td class="src"><a href="/usr/share/doc/ghc-doc/html/libraries/base-4.6.0.1/Control-Applicative.html#t:Applicative">Applicative</a> m => <a href="/usr/share/doc/ghc-doc/html/libraries/base-4.6.0.1/Control-Applicative.html#t:Applicative">Applicative</a> (<a href="Control-Monad-Trans-Resource.html#t:ResourceT">ResourceT</a> m)</td><td class="doc empty"> </td></tr><tr><td class="src"><a href="/usr/share/doc/libghc-transformers-doc/html/Control-Monad-IO-Class.html#t:MonadIO">MonadIO</a> m => <a href="/usr/share/doc/libghc-transformers-doc/html/Control-Monad-IO-Class.html#t:MonadIO">MonadIO</a> (<a href="Control-Monad-Trans-Resource.html#t:ResourceT">ResourceT</a> m)</td><td class="doc empty"> </td></tr><tr><td class="src"><a href="/usr/share/doc/libghc-mtl-doc/html/Control-Monad-Cont-Class.html#t:MonadCont">MonadCont</a> m => <a href="/usr/share/doc/libghc-mtl-doc/html/Control-Monad-Cont-Class.html#t:MonadCont">MonadCont</a> (<a href="Control-Monad-Trans-Resource.html#t:ResourceT">ResourceT</a> m)</td><td class="doc empty"> </td></tr><tr><td class="src">(<a href="/usr/share/doc/libghc-transformers-doc/html/Control-Monad-IO-Class.html#t:MonadIO">MonadIO</a> m, <a href="Control-Monad-Trans-Resource.html#t:MonadActive">MonadActive</a> m) => <a href="Control-Monad-Trans-Resource.html#t:MonadActive">MonadActive</a> (<a href="Control-Monad-Trans-Resource.html#t:ResourceT">ResourceT</a> m)</td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Control-Monad-Trans-Resource.html#t:MonadThrow">MonadThrow</a> m => <a href="Control-Monad-Trans-Resource.html#t:MonadThrow">MonadThrow</a> (<a href="Control-Monad-Trans-Resource.html#t:ResourceT">ResourceT</a> m)</td><td class="doc empty"> </td></tr><tr><td class="src">(<a href="Control-Monad-Trans-Resource.html#t:MonadThrow">MonadThrow</a> m, <a href="Control-Monad-Trans-Resource.html#t:MonadUnsafeIO">MonadUnsafeIO</a> m, <a href="/usr/share/doc/libghc-transformers-doc/html/Control-Monad-IO-Class.html#t:MonadIO">MonadIO</a> m, <a href="/usr/share/doc/ghc-doc/html/libraries/base-4.6.0.1/Control-Applicative.html#t:Applicative">Applicative</a> m) => <a href="Control-Monad-Trans-Resource.html#t:MonadResource">MonadResource</a> (<a href="Control-Monad-Trans-Resource.html#t:ResourceT">ResourceT</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:ResIO" class="def">ResIO</a> a = <a href="Control-Monad-Trans-Resource.html#t:ResourceT">ResourceT</a> <a href="/usr/share/doc/ghc-doc/html/libraries/base-4.6.0.1/System-IO.html#t:IO">IO</a> a<a href="src/Control-Monad-Trans-Resource.html#ResIO" class="link">Source</a></p><div class="doc"><p>Convenient alias for <code>ResourceT IO</code>.
</p></div></div><div class="top"><p class="src"><span class="keyword">data</span> <a name="t:ReleaseKey" class="def">ReleaseKey</a> <a href="src/Control-Monad-Trans-Resource.html#ReleaseKey" class="link">Source</a></p><div class="doc"><p>A lookup key for a specific release action. This value is returned by
<code><a href="Control-Monad-Trans-Resource.html#v:register">register</a></code> and <code><a href="Control-Monad-Trans-Resource.html#v:allocate">allocate</a></code>, and is passed to <code><a href="Control-Monad-Trans-Resource.html#v:release">release</a></code>.
</p><p>Since 0.3.0
</p></div><div class="subs instances"><p id="control.i:ReleaseKey" class="caption collapser" onclick="toggleSection('i:ReleaseKey')">Instances</p><div id="section.i:ReleaseKey" class="show"><table><tr><td class="src"><a href="/usr/share/doc/ghc-doc/html/libraries/base-4.6.0.1/Data-Typeable-Internal.html#t:Typeable">Typeable</a> <a href="Control-Monad-Trans-Resource.html#t:ReleaseKey">ReleaseKey</a></td><td class="doc empty"> </td></tr></table></div></div></div><h1 id="g:2">Unwrap
</h1><div class="top"><p class="src"><a name="v:runResourceT" class="def">runResourceT</a> :: <a href="Control-Monad-Trans-Resource.html#t:MonadBaseControl">MonadBaseControl</a> <a href="/usr/share/doc/ghc-doc/html/libraries/base-4.6.0.1/System-IO.html#t:IO">IO</a> m => <a href="Control-Monad-Trans-Resource.html#t:ResourceT">ResourceT</a> m a -> m a<a href="src/Control-Monad-Trans-Resource.html#runResourceT" class="link">Source</a></p><div class="doc"><p>Unwrap a <code><a href="Control-Monad-Trans-Resource.html#t:ResourceT">ResourceT</a></code> transformer, and call all registered release actions.
</p><p>Note that there is some reference counting involved due to <code><a href="Control-Monad-Trans-Resource.html#v:resourceForkIO">resourceForkIO</a></code>.
If multiple threads are sharing the same collection of resources, only the
last call to <code>runResourceT</code> will deallocate the resources.
</p><p>Since 0.3.0
</p></div></div><h1 id="g:3">Special actions
</h1><div class="top"><p class="src"><a name="v:resourceForkIO" class="def">resourceForkIO</a> :: <a href="Control-Monad-Trans-Resource.html#t:MonadBaseControl">MonadBaseControl</a> <a href="/usr/share/doc/ghc-doc/html/libraries/base-4.6.0.1/System-IO.html#t:IO">IO</a> m => <a href="Control-Monad-Trans-Resource.html#t:ResourceT">ResourceT</a> m () -> <a href="Control-Monad-Trans-Resource.html#t:ResourceT">ResourceT</a> m <a href="/usr/share/doc/ghc-doc/html/libraries/base-4.6.0.1/Control-Concurrent.html#t:ThreadId">ThreadId</a><a href="src/Control-Monad-Trans-Resource.html#resourceForkIO" class="link">Source</a></p><div class="doc"><p>Introduce a reference-counting scheme to allow a resource context to be
shared by multiple threads. Once the last thread exits, all remaining
resources will be released.
</p><p>Note that abuse of this function will greatly delay the deallocation of
registered resources. This function should be used with care. A general
guideline:
</p><p>If you are allocating a resource that should be shared by multiple threads,
and will be held for a long time, you should allocate it at the beginning of
a new <code>ResourceT</code> block and then call <code>resourceForkIO</code> from there.
</p><p>Since 0.3.0
</p></div></div><h1 id="g:4">Monad transformation
</h1><div class="top"><p class="src"><a name="v:transResourceT" class="def">transResourceT</a> :: (m a -> n b) -> <a href="Control-Monad-Trans-Resource.html#t:ResourceT">ResourceT</a> m a -> <a href="Control-Monad-Trans-Resource.html#t:ResourceT">ResourceT</a> n b<a href="src/Control-Monad-Trans-Resource.html#transResourceT" class="link">Source</a></p><div class="doc"><p>Transform the monad a <code>ResourceT</code> lives in. This is most often used to
strip or add new transformers to a stack, e.g. to run a <code>ReaderT</code>.
</p><p>Note that this function is a slight generalization of <code><a href="/usr/share/doc/libghc-mmorph-doc/html/Control-Monad-Morph.html#v:hoist">hoist</a></code>.
</p><p>Since 0.3.0
</p></div></div><div class="top"><p class="src"><a name="v:joinResourceT" class="def">joinResourceT</a> :: <a href="Control-Monad-Trans-Resource.html#t:ResourceT">ResourceT</a> (<a href="Control-Monad-Trans-Resource.html#t:ResourceT">ResourceT</a> m) a -> <a href="Control-Monad-Trans-Resource.html#t:ResourceT">ResourceT</a> m a<a href="src/Control-Monad-Trans-Resource.html#joinResourceT" class="link">Source</a></p><div class="doc"><p>This function mirrors <code>join</code> at the transformer level: it will collapse
two levels of <code>ResourceT</code> into a single <code>ResourceT</code>.
</p><p>Since 0.4.6
</p></div></div><h1 id="g:5">A specific Exception transformer
</h1><div class="top"><p class="src"><span class="keyword">newtype</span> <a name="t:ExceptionT" class="def">ExceptionT</a> m a <a href="src/Control-Monad-Trans-Resource.html#ExceptionT" class="link">Source</a></p><div class="doc"><p>The express purpose of this transformer is to allow non-<code>IO</code>-based monad
stacks to catch exceptions via the <code><a href="Control-Monad-Trans-Resource.html#t:MonadThrow">MonadThrow</a></code> typeclass.
</p><p>Since 0.3.0
</p></div><div class="subs constructors"><p class="caption">Constructors</p><table><tr><td class="src"><a name="v:ExceptionT" class="def">ExceptionT</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:runExceptionT" class="def">runExceptionT</a> :: m (<a href="/usr/share/doc/ghc-doc/html/libraries/base-4.6.0.1/Data-Either.html#t:Either">Either</a> <a href="/usr/share/doc/ghc-doc/html/libraries/base-4.6.0.1/Control-Exception-Base.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:ExceptionT" class="caption collapser" onclick="toggleSection('i:ExceptionT')">Instances</p><div id="section.i:ExceptionT" class="show"><table><tr><td class="src"><a href="/usr/share/doc/libghc-mmorph-doc/html/Control-Monad-Morph.html#t:MonadTrans">MonadTrans</a> <a href="Control-Monad-Trans-Resource.html#t:ExceptionT">ExceptionT</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a href="/usr/share/doc/libghc-monad-control-doc/html/Control-Monad-Trans-Control.html#t:MonadTransControl">MonadTransControl</a> <a href="Control-Monad-Trans-Resource.html#t:ExceptionT">ExceptionT</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a href="/usr/share/doc/libghc-mtl-doc/html/Control-Monad-RWS-Class.html#t:MonadRWS">MonadRWS</a> r w s m => <a href="/usr/share/doc/libghc-mtl-doc/html/Control-Monad-RWS-Class.html#t:MonadRWS">MonadRWS</a> r w s (<a href="Control-Monad-Trans-Resource.html#t:ExceptionT">ExceptionT</a> m)</td><td class="doc empty"> </td></tr><tr><td class="src"><a href="/usr/share/doc/libghc-transformers-base-doc/html/Control-Monad-Base.html#t:MonadBase">MonadBase</a> b m => <a href="/usr/share/doc/libghc-transformers-base-doc/html/Control-Monad-Base.html#t:MonadBase">MonadBase</a> b (<a href="Control-Monad-Trans-Resource.html#t:ExceptionT">ExceptionT</a> m)</td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Control-Monad-Trans-Resource.html#t:MonadBaseControl">MonadBaseControl</a> b m => <a href="Control-Monad-Trans-Resource.html#t:MonadBaseControl">MonadBaseControl</a> b (<a href="Control-Monad-Trans-Resource.html#t:ExceptionT">ExceptionT</a> m)</td><td class="doc empty"> </td></tr><tr><td class="src"><a href="/usr/share/doc/libghc-mtl-doc/html/Control-Monad-Error-Class.html#t:MonadError">MonadError</a> e m => <a href="/usr/share/doc/libghc-mtl-doc/html/Control-Monad-Error-Class.html#t:MonadError">MonadError</a> e (<a href="Control-Monad-Trans-Resource.html#t:ExceptionT">ExceptionT</a> m)</td><td class="doc empty"> </td></tr><tr><td class="src"><a href="/usr/share/doc/libghc-mtl-doc/html/Control-Monad-Reader-Class.html#t:MonadReader">MonadReader</a> r m => <a href="/usr/share/doc/libghc-mtl-doc/html/Control-Monad-Reader-Class.html#t:MonadReader">MonadReader</a> r (<a href="Control-Monad-Trans-Resource.html#t:ExceptionT">ExceptionT</a> m)</td><td class="doc empty"> </td></tr><tr><td class="src"><a href="/usr/share/doc/libghc-mtl-doc/html/Control-Monad-State-Class.html#t:MonadState">MonadState</a> s m => <a href="/usr/share/doc/libghc-mtl-doc/html/Control-Monad-State-Class.html#t:MonadState">MonadState</a> s (<a href="Control-Monad-Trans-Resource.html#t:ExceptionT">ExceptionT</a> m)</td><td class="doc empty"> </td></tr><tr><td class="src"><a href="/usr/share/doc/libghc-mtl-doc/html/Control-Monad-Writer-Class.html#t:MonadWriter">MonadWriter</a> w m => <a href="/usr/share/doc/libghc-mtl-doc/html/Control-Monad-Writer-Class.html#t:MonadWriter">MonadWriter</a> w (<a href="Control-Monad-Trans-Resource.html#t:ExceptionT">ExceptionT</a> m)</td><td class="doc empty"> </td></tr><tr><td class="src"><a href="/usr/share/doc/ghc-doc/html/libraries/base-4.6.0.1/Control-Monad.html#t:Monad">Monad</a> m => <a href="/usr/share/doc/ghc-doc/html/libraries/base-4.6.0.1/Control-Monad.html#t:Monad">Monad</a> (<a href="Control-Monad-Trans-Resource.html#t:ExceptionT">ExceptionT</a> m)</td><td class="doc empty"> </td></tr><tr><td class="src"><a href="/usr/share/doc/ghc-doc/html/libraries/base-4.6.0.1/Control-Monad.html#t:Monad">Monad</a> m => <a href="/usr/share/doc/ghc-doc/html/libraries/base-4.6.0.1/Control-Monad.html#t:Functor">Functor</a> (<a href="Control-Monad-Trans-Resource.html#t:ExceptionT">ExceptionT</a> m)</td><td class="doc empty"> </td></tr><tr><td class="src"><a href="/usr/share/doc/ghc-doc/html/libraries/base-4.6.0.1/Control-Monad.html#t:Monad">Monad</a> m => <a href="/usr/share/doc/ghc-doc/html/libraries/base-4.6.0.1/Control-Applicative.html#t:Applicative">Applicative</a> (<a href="Control-Monad-Trans-Resource.html#t:ExceptionT">ExceptionT</a> m)</td><td class="doc empty"> </td></tr><tr><td class="src"><a href="/usr/share/doc/libghc-transformers-doc/html/Control-Monad-IO-Class.html#t:MonadIO">MonadIO</a> m => <a href="/usr/share/doc/libghc-transformers-doc/html/Control-Monad-IO-Class.html#t:MonadIO">MonadIO</a> (<a href="Control-Monad-Trans-Resource.html#t:ExceptionT">ExceptionT</a> m)</td><td class="doc empty"> </td></tr><tr><td class="src"><a href="/usr/share/doc/libghc-mtl-doc/html/Control-Monad-Cont-Class.html#t:MonadCont">MonadCont</a> m => <a href="/usr/share/doc/libghc-mtl-doc/html/Control-Monad-Cont-Class.html#t:MonadCont">MonadCont</a> (<a href="Control-Monad-Trans-Resource.html#t:ExceptionT">ExceptionT</a> m)</td><td class="doc empty"> </td></tr><tr><td class="src"><a href="/usr/share/doc/ghc-doc/html/libraries/base-4.6.0.1/Control-Monad.html#t:Monad">Monad</a> m => <a href="Control-Monad-Trans-Resource.html#t:MonadThrow">MonadThrow</a> (<a href="Control-Monad-Trans-Resource.html#t:ExceptionT">ExceptionT</a> m)</td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Control-Monad-Trans-Resource.html#t:MonadResource">MonadResource</a> m => <a href="Control-Monad-Trans-Resource.html#t:MonadResource">MonadResource</a> (<a href="Control-Monad-Trans-Resource.html#t:ExceptionT">ExceptionT</a> m)</td><td class="doc empty"> </td></tr></table></div></div></div><div class="top"><p class="src"><a name="v:runExceptionT_" class="def">runExceptionT_</a> :: <a href="/usr/share/doc/ghc-doc/html/libraries/base-4.6.0.1/Control-Monad.html#t:Monad">Monad</a> m => <a href="Control-Monad-Trans-Resource.html#t:ExceptionT">ExceptionT</a> m a -> m a<a href="src/Control-Monad-Trans-Resource.html#runExceptionT_" class="link">Source</a></p><div class="doc"><p>Same as <code><a href="Control-Monad-Trans-Resource.html#v:runExceptionT">runExceptionT</a></code>, but immediately <code><a href="/usr/share/doc/ghc-doc/html/libraries/base-4.6.0.1/Control-Exception-Base.html#v:throw">throw</a></code> any exception returned.
</p><p>Since 0.3.0
</p></div></div><div class="top"><p class="src"><a name="v:runException" class="def">runException</a> :: <a href="Control-Monad-Trans-Resource.html#t:ExceptionT">ExceptionT</a> <a href="/usr/share/doc/libghc-transformers-doc/html/Data-Functor-Identity.html#t:Identity">Identity</a> a -> <a href="/usr/share/doc/ghc-doc/html/libraries/base-4.6.0.1/Data-Either.html#t:Either">Either</a> <a href="/usr/share/doc/ghc-doc/html/libraries/base-4.6.0.1/Control-Exception-Base.html#t:SomeException">SomeException</a> a<a href="src/Control-Monad-Trans-Resource.html#runException" class="link">Source</a></p><div class="doc"><p>Run an <code>ExceptionT Identity</code> stack.
</p><p>Since 0.4.2
</p></div></div><div class="top"><p class="src"><a name="v:runException_" class="def">runException_</a> :: <a href="Control-Monad-Trans-Resource.html#t:ExceptionT">ExceptionT</a> <a href="/usr/share/doc/libghc-transformers-doc/html/Data-Functor-Identity.html#t:Identity">Identity</a> a -> a<a href="src/Control-Monad-Trans-Resource.html#runException_" class="link">Source</a></p><div class="doc"><p>Run an <code>ExceptionT Identity</code> stack, but immediately <code><a href="/usr/share/doc/ghc-doc/html/libraries/base-4.6.0.1/Control-Exception-Base.html#v:throw">throw</a></code> any exception returned.
</p><p>Since 0.4.2
</p></div></div><h1 id="g:6">Registering/releasing
</h1><div class="top"><p class="src"><a name="v:allocate" class="def">allocate</a><a href="src/Control-Monad-Trans-Resource.html#allocate" class="link">Source</a></p><div class="subs arguments"><p class="caption">Arguments</p><table><tr><td class="src">:: <a href="Control-Monad-Trans-Resource.html#t:MonadResource">MonadResource</a> m</td><td class="doc empty"> </td></tr><tr><td class="src">=> <a href="/usr/share/doc/ghc-doc/html/libraries/base-4.6.0.1/System-IO.html#t:IO">IO</a> a</td><td class="doc"><p>allocate
</p></td></tr><tr><td class="src">-> (a -> <a href="/usr/share/doc/ghc-doc/html/libraries/base-4.6.0.1/System-IO.html#t:IO">IO</a> ())</td><td class="doc"><p>free resource
</p></td></tr><tr><td class="src">-> m (<a href="Control-Monad-Trans-Resource.html#t:ReleaseKey">ReleaseKey</a>, a)</td><td class="doc empty"> </td></tr></table></div><div class="doc"><p>Perform some allocation, and automatically register a cleanup action.
</p><p>This is almost identical to calling the allocation and then
<code>register</code>ing the release action, but this properly handles masking of
asynchronous exceptions.
</p><p>Since 0.3.0
</p></div></div><div class="top"><p class="src"><a name="v:register" class="def">register</a> :: <a href="Control-Monad-Trans-Resource.html#t:MonadResource">MonadResource</a> m => <a href="/usr/share/doc/ghc-doc/html/libraries/base-4.6.0.1/System-IO.html#t:IO">IO</a> () -> m <a href="Control-Monad-Trans-Resource.html#t:ReleaseKey">ReleaseKey</a><a href="src/Control-Monad-Trans-Resource.html#register" class="link">Source</a></p><div class="doc"><p>Register some action that will be called precisely once, either when
<code><a href="Control-Monad-Trans-Resource.html#v:runResourceT">runResourceT</a></code> is called, or when the <code><a href="Control-Monad-Trans-Resource.html#t:ReleaseKey">ReleaseKey</a></code> is passed to <code><a href="Control-Monad-Trans-Resource.html#v:release">release</a></code>.
</p><p>Since 0.3.0
</p></div></div><div class="top"><p class="src"><a name="v:release" class="def">release</a> :: <a href="/usr/share/doc/libghc-transformers-doc/html/Control-Monad-IO-Class.html#t:MonadIO">MonadIO</a> m => <a href="Control-Monad-Trans-Resource.html#t:ReleaseKey">ReleaseKey</a> -> m ()<a href="src/Control-Monad-Trans-Resource.html#release" class="link">Source</a></p><div class="doc"><p>Call a release action early, and deregister it from the list of cleanup
actions to be performed.
</p><p>Since 0.3.0
</p></div></div><div class="top"><p class="src"><a name="v:unprotect" class="def">unprotect</a> :: <a href="/usr/share/doc/libghc-transformers-doc/html/Control-Monad-IO-Class.html#t:MonadIO">MonadIO</a> m => <a href="Control-Monad-Trans-Resource.html#t:ReleaseKey">ReleaseKey</a> -> m (<a href="/usr/share/doc/ghc-doc/html/libraries/base-4.6.0.1/Data-Maybe.html#t:Maybe">Maybe</a> (<a href="/usr/share/doc/ghc-doc/html/libraries/base-4.6.0.1/System-IO.html#t:IO">IO</a> ()))<a href="src/Control-Monad-Trans-Resource.html#unprotect" class="link">Source</a></p><div class="doc"><p>Unprotect resource from cleanup actions, this allowes you to send
resource into another resourcet process and reregister it there.
It returns an release action that should be run in order to clean
resource or Nothing in case if resource is already freed.
</p><p>Since 0.4.5
</p></div></div><div class="top"><p class="src"><a name="v:resourceMask" class="def">resourceMask</a> :: <a href="Control-Monad-Trans-Resource.html#t:MonadResource">MonadResource</a> m => ((<span class="keyword">forall</span> a. <a href="Control-Monad-Trans-Resource.html#t:ResourceT">ResourceT</a> <a href="/usr/share/doc/ghc-doc/html/libraries/base-4.6.0.1/System-IO.html#t:IO">IO</a> a -> <a href="Control-Monad-Trans-Resource.html#t:ResourceT">ResourceT</a> <a href="/usr/share/doc/ghc-doc/html/libraries/base-4.6.0.1/System-IO.html#t:IO">IO</a> a) -> <a href="Control-Monad-Trans-Resource.html#t:ResourceT">ResourceT</a> <a href="/usr/share/doc/ghc-doc/html/libraries/base-4.6.0.1/System-IO.html#t:IO">IO</a> b) -> m b<a href="src/Control-Monad-Trans-Resource.html#resourceMask" class="link">Source</a></p><div class="doc"><p>Perform asynchronous exception masking.
</p><p>This is more general then <code>Control.Exception.mask</code>, yet more efficient
than <code>Control.Exception.Lifted.mask</code>.
</p><p>Since 0.3.0
</p></div></div><h1 id="g:7">Type class/associated types
</h1><div class="top"><p class="src"><span class="keyword">class</span> (<a href="Control-Monad-Trans-Resource.html#t:MonadThrow">MonadThrow</a> m, <a href="Control-Monad-Trans-Resource.html#t:MonadUnsafeIO">MonadUnsafeIO</a> m, <a href="/usr/share/doc/libghc-transformers-doc/html/Control-Monad-IO-Class.html#t:MonadIO">MonadIO</a> m, <a href="/usr/share/doc/ghc-doc/html/libraries/base-4.6.0.1/Control-Applicative.html#t:Applicative">Applicative</a> m) => <a name="t:MonadResource" class="def">MonadResource</a> m <span class="keyword">where</span><a href="src/Control-Monad-Trans-Resource.html#MonadResource" class="link">Source</a></p><div class="doc"><p>A <code>Monad</code> which allows for safe resource allocation. In theory, any monad
transformer stack included a <code>ResourceT</code> can be an instance of
<code>MonadResource</code>.
</p><p>Note: <code>runResourceT</code> has a requirement for a <code>MonadBaseControl IO m</code> monad,
which allows control operations to be lifted. A <code>MonadResource</code> does not
have this requirement. This means that transformers such as <code>ContT</code> can be
an instance of <code>MonadResource</code>. However, the <code>ContT</code> wrapper will need to be
unwrapped before calling <code>runResourceT</code>.
</p><p>Since 0.3.0
</p></div><div class="subs methods"><p class="caption">Methods</p><p class="src"><a name="v:liftResourceT" class="def">liftResourceT</a> :: <a href="Control-Monad-Trans-Resource.html#t:ResourceT">ResourceT</a> <a href="/usr/share/doc/ghc-doc/html/libraries/base-4.6.0.1/System-IO.html#t:IO">IO</a> a -> m a<a href="src/Control-Monad-Trans-Resource.html#liftResourceT" class="link">Source</a></p><div class="doc"><p>Lift a <code>ResourceT IO</code> action into the current <code>Monad</code>.
</p><p>Since 0.4.0
</p></div></div><div class="subs instances"><p id="control.i:MonadResource" class="caption collapser" onclick="toggleSection('i:MonadResource')">Instances</p><div id="section.i:MonadResource" class="show"><table><tr><td class="src"><a href="Control-Monad-Trans-Resource.html#t:MonadResource">MonadResource</a> m => <a href="Control-Monad-Trans-Resource.html#t:MonadResource">MonadResource</a> (<a href="/usr/share/doc/libghc-mtl-doc/html/Control-Monad-List.html#t:ListT">ListT</a> m)</td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Control-Monad-Trans-Resource.html#t:MonadResource">MonadResource</a> m => <a href="Control-Monad-Trans-Resource.html#t:MonadResource">MonadResource</a> (<a href="/usr/share/doc/libghc-transformers-doc/html/Control-Monad-Trans-Maybe.html#t:MaybeT">MaybeT</a> m)</td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Control-Monad-Trans-Resource.html#t:MonadResource">MonadResource</a> m => <a href="Control-Monad-Trans-Resource.html#t:MonadResource">MonadResource</a> (<a href="/usr/share/doc/libghc-transformers-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="Control-Monad-Trans-Resource.html#t:MonadResource">MonadResource</a> m => <a href="Control-Monad-Trans-Resource.html#t:MonadResource">MonadResource</a> (<a href="Control-Monad-Trans-Resource.html#t:ExceptionT">ExceptionT</a> m)</td><td class="doc empty"> </td></tr><tr><td class="src">(<a href="Control-Monad-Trans-Resource.html#t:MonadThrow">MonadThrow</a> m, <a href="Control-Monad-Trans-Resource.html#t:MonadUnsafeIO">MonadUnsafeIO</a> m, <a href="/usr/share/doc/libghc-transformers-doc/html/Control-Monad-IO-Class.html#t:MonadIO">MonadIO</a> m, <a href="/usr/share/doc/ghc-doc/html/libraries/base-4.6.0.1/Control-Applicative.html#t:Applicative">Applicative</a> m) => <a href="Control-Monad-Trans-Resource.html#t:MonadResource">MonadResource</a> (<a href="Control-Monad-Trans-Resource.html#t:ResourceT">ResourceT</a> m)</td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Control-Monad-Trans-Resource.html#t:MonadResource">MonadResource</a> m => <a href="Control-Monad-Trans-Resource.html#t:MonadResource">MonadResource</a> (<a href="/usr/share/doc/libghc-mtl-doc/html/Control-Monad-Cont.html#t:ContT">ContT</a> r m)</td><td class="doc empty"> </td></tr><tr><td class="src">(<a href="/usr/share/doc/libghc-mtl-doc/html/Control-Monad-Error-Class.html#t:Error">Error</a> e, <a href="Control-Monad-Trans-Resource.html#t:MonadResource">MonadResource</a> m) => <a href="Control-Monad-Trans-Resource.html#t:MonadResource">MonadResource</a> (<a href="/usr/share/doc/libghc-mtl-doc/html/Control-Monad-Error.html#t:ErrorT">ErrorT</a> e m)</td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Control-Monad-Trans-Resource.html#t:MonadResource">MonadResource</a> m => <a href="Control-Monad-Trans-Resource.html#t:MonadResource">MonadResource</a> (<a href="/usr/share/doc/libghc-mtl-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-Trans-Resource.html#t:MonadResource">MonadResource</a> m => <a href="Control-Monad-Trans-Resource.html#t:MonadResource">MonadResource</a> (<a href="/usr/share/doc/libghc-mtl-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-Trans-Resource.html#t:MonadResource">MonadResource</a> m => <a href="Control-Monad-Trans-Resource.html#t:MonadResource">MonadResource</a> (<a href="/usr/share/doc/libghc-mtl-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="/usr/share/doc/ghc-doc/html/libraries/base-4.6.0.1/Data-Monoid.html#t:Monoid">Monoid</a> w, <a href="Control-Monad-Trans-Resource.html#t:MonadResource">MonadResource</a> m) => <a href="Control-Monad-Trans-Resource.html#t:MonadResource">MonadResource</a> (<a href="/usr/share/doc/libghc-mtl-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="/usr/share/doc/ghc-doc/html/libraries/base-4.6.0.1/Data-Monoid.html#t:Monoid">Monoid</a> w, <a href="Control-Monad-Trans-Resource.html#t:MonadResource">MonadResource</a> m) => <a href="Control-Monad-Trans-Resource.html#t:MonadResource">MonadResource</a> (<a href="/usr/share/doc/libghc-mtl-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="/usr/share/doc/ghc-doc/html/libraries/base-4.6.0.1/Data-Monoid.html#t:Monoid">Monoid</a> w, <a href="Control-Monad-Trans-Resource.html#t:MonadResource">MonadResource</a> m) => <a href="Control-Monad-Trans-Resource.html#t:MonadResource">MonadResource</a> (<a href="/usr/share/doc/libghc-mtl-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="/usr/share/doc/ghc-doc/html/libraries/base-4.6.0.1/Data-Monoid.html#t:Monoid">Monoid</a> w, <a href="Control-Monad-Trans-Resource.html#t:MonadResource">MonadResource</a> m) => <a href="Control-Monad-Trans-Resource.html#t:MonadResource">MonadResource</a> (<a href="/usr/share/doc/libghc-mtl-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><div class="top"><p class="src"><span class="keyword">class</span> <a href="/usr/share/doc/ghc-doc/html/libraries/base-4.6.0.1/Control-Monad.html#t:Monad">Monad</a> m => <a name="t:MonadUnsafeIO" class="def">MonadUnsafeIO</a> m <span class="keyword">where</span><a href="src/Control-Monad-Trans-Resource.html#MonadUnsafeIO" class="link">Source</a></p><div class="doc"><p>A <code>Monad</code> based on some monad which allows running of some <code><a href="/usr/share/doc/ghc-doc/html/libraries/base-4.6.0.1/System-IO.html#t:IO">IO</a></code> actions,
via unsafe calls. This applies to <code><a href="/usr/share/doc/ghc-doc/html/libraries/base-4.6.0.1/System-IO.html#t:IO">IO</a></code> and <code><a href="/usr/share/doc/ghc-doc/html/libraries/base-4.6.0.1/Control-Monad-ST-Safe.html#t:ST">ST</a></code>, for instance.
</p><p>Since 0.3.0
</p></div><div class="subs methods"><p class="caption">Methods</p><p class="src"><a name="v:unsafeLiftIO" class="def">unsafeLiftIO</a> :: <a href="/usr/share/doc/ghc-doc/html/libraries/base-4.6.0.1/System-IO.html#t:IO">IO</a> a -> m a<a href="src/Control-Monad-Trans-Resource.html#unsafeLiftIO" class="link">Source</a></p></div><div class="subs instances"><p id="control.i:MonadUnsafeIO" class="caption collapser" onclick="toggleSection('i:MonadUnsafeIO')">Instances</p><div id="section.i:MonadUnsafeIO" class="show"><table><tr><td class="src"><a href="Control-Monad-Trans-Resource.html#t:MonadUnsafeIO">MonadUnsafeIO</a> <a href="/usr/share/doc/ghc-doc/html/libraries/base-4.6.0.1/System-IO.html#t:IO">IO</a></td><td class="doc empty"> </td></tr><tr><td class="src">(<a href="/usr/share/doc/libghc-mmorph-doc/html/Control-Monad-Morph.html#t:MonadTrans">MonadTrans</a> t, <a href="Control-Monad-Trans-Resource.html#t:MonadUnsafeIO">MonadUnsafeIO</a> m, <a href="/usr/share/doc/ghc-doc/html/libraries/base-4.6.0.1/Control-Monad.html#t:Monad">Monad</a> (t m)) => <a href="Control-Monad-Trans-Resource.html#t:MonadUnsafeIO">MonadUnsafeIO</a> (t m)</td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Control-Monad-Trans-Resource.html#t:MonadUnsafeIO">MonadUnsafeIO</a> (<a href="/usr/share/doc/ghc-doc/html/libraries/base-4.6.0.1/Control-Monad-ST-Safe.html#t:ST">ST</a> s)</td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Control-Monad-Trans-Resource.html#t:MonadUnsafeIO">MonadUnsafeIO</a> (<a href="/usr/share/doc/ghc-doc/html/libraries/base-4.6.0.1/Control-Monad-ST-Lazy-Safe.html#t:ST">ST</a> s)</td><td class="doc empty"> </td></tr></table></div></div></div><div class="top"><p class="src"><span class="keyword">class</span> <a href="/usr/share/doc/ghc-doc/html/libraries/base-4.6.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-Trans-Resource.html#MonadThrow" class="link">Source</a></p><div class="doc"><p>A <code>Monad</code> which can throw exceptions. Note that this does not work in a
vanilla <code>ST</code> or <code>Identity</code> monad. Instead, you should use the <code><a href="Control-Monad-Trans-Resource.html#t:ExceptionT">ExceptionT</a></code>
transformer in your stack if you are dealing with a non-<code>IO</code> base monad.
</p><p>Since 0.3.0
</p></div><div class="subs methods"><p class="caption">Methods</p><p class="src"><a name="v:monadThrow" class="def">monadThrow</a> :: <a href="/usr/share/doc/ghc-doc/html/libraries/base-4.6.0.1/Control-Exception-Base.html#t:Exception">Exception</a> e => e -> m a<a href="src/Control-Monad-Trans-Resource.html#monadThrow" class="link">Source</a></p></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-Trans-Resource.html#t:MonadThrow">MonadThrow</a> []</td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Control-Monad-Trans-Resource.html#t:MonadThrow">MonadThrow</a> <a href="/usr/share/doc/ghc-doc/html/libraries/base-4.6.0.1/System-IO.html#t:IO">IO</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Control-Monad-Trans-Resource.html#t:MonadThrow">MonadThrow</a> <a href="/usr/share/doc/ghc-doc/html/libraries/base-4.6.0.1/Data-Maybe.html#t:Maybe">Maybe</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Control-Monad-Trans-Resource.html#t:MonadThrow">MonadThrow</a> (<a href="/usr/share/doc/ghc-doc/html/libraries/base-4.6.0.1/Data-Either.html#t:Either">Either</a> <a href="/usr/share/doc/ghc-doc/html/libraries/base-4.6.0.1/Control-Exception-Base.html#t:SomeException">SomeException</a>)</td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Control-Monad-Trans-Resource.html#t:MonadThrow">MonadThrow</a> m => <a href="Control-Monad-Trans-Resource.html#t:MonadThrow">MonadThrow</a> (<a href="/usr/share/doc/libghc-mtl-doc/html/Control-Monad-List.html#t:ListT">ListT</a> m)</td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Control-Monad-Trans-Resource.html#t:MonadThrow">MonadThrow</a> m => <a href="Control-Monad-Trans-Resource.html#t:MonadThrow">MonadThrow</a> (<a href="/usr/share/doc/libghc-transformers-doc/html/Control-Monad-Trans-Maybe.html#t:MaybeT">MaybeT</a> m)</td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Control-Monad-Trans-Resource.html#t:MonadThrow">MonadThrow</a> m => <a href="Control-Monad-Trans-Resource.html#t:MonadThrow">MonadThrow</a> (<a href="/usr/share/doc/libghc-transformers-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="/usr/share/doc/ghc-doc/html/libraries/base-4.6.0.1/Control-Monad.html#t:Monad">Monad</a> m => <a href="Control-Monad-Trans-Resource.html#t:MonadThrow">MonadThrow</a> (<a href="Control-Monad-Trans-Resource.html#t:ExceptionT">ExceptionT</a> m)</td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Control-Monad-Trans-Resource.html#t:MonadThrow">MonadThrow</a> m => <a href="Control-Monad-Trans-Resource.html#t:MonadThrow">MonadThrow</a> (<a href="Control-Monad-Trans-Resource.html#t:ResourceT">ResourceT</a> m)</td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Control-Monad-Trans-Resource.html#t:MonadThrow">MonadThrow</a> m => <a href="Control-Monad-Trans-Resource.html#t:MonadThrow">MonadThrow</a> (<a href="/usr/share/doc/libghc-mtl-doc/html/Control-Monad-Cont.html#t:ContT">ContT</a> r m)</td><td class="doc empty"> </td></tr><tr><td class="src">(<a href="/usr/share/doc/libghc-mtl-doc/html/Control-Monad-Error-Class.html#t:Error">Error</a> e, <a href="Control-Monad-Trans-Resource.html#t:MonadThrow">MonadThrow</a> m) => <a href="Control-Monad-Trans-Resource.html#t:MonadThrow">MonadThrow</a> (<a href="/usr/share/doc/libghc-mtl-doc/html/Control-Monad-Error.html#t:ErrorT">ErrorT</a> e m)</td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Control-Monad-Trans-Resource.html#t:MonadThrow">MonadThrow</a> m => <a href="Control-Monad-Trans-Resource.html#t:MonadThrow">MonadThrow</a> (<a href="/usr/share/doc/libghc-mtl-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-Trans-Resource.html#t:MonadThrow">MonadThrow</a> m => <a href="Control-Monad-Trans-Resource.html#t:MonadThrow">MonadThrow</a> (<a href="/usr/share/doc/libghc-mtl-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-Trans-Resource.html#t:MonadThrow">MonadThrow</a> m => <a href="Control-Monad-Trans-Resource.html#t:MonadThrow">MonadThrow</a> (<a href="/usr/share/doc/libghc-mtl-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="/usr/share/doc/ghc-doc/html/libraries/base-4.6.0.1/Data-Monoid.html#t:Monoid">Monoid</a> w, <a href="Control-Monad-Trans-Resource.html#t:MonadThrow">MonadThrow</a> m) => <a href="Control-Monad-Trans-Resource.html#t:MonadThrow">MonadThrow</a> (<a href="/usr/share/doc/libghc-mtl-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="/usr/share/doc/ghc-doc/html/libraries/base-4.6.0.1/Data-Monoid.html#t:Monoid">Monoid</a> w, <a href="Control-Monad-Trans-Resource.html#t:MonadThrow">MonadThrow</a> m) => <a href="Control-Monad-Trans-Resource.html#t:MonadThrow">MonadThrow</a> (<a href="/usr/share/doc/libghc-mtl-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="/usr/share/doc/ghc-doc/html/libraries/base-4.6.0.1/Data-Monoid.html#t:Monoid">Monoid</a> w, <a href="Control-Monad-Trans-Resource.html#t:MonadThrow">MonadThrow</a> m) => <a href="Control-Monad-Trans-Resource.html#t:MonadThrow">MonadThrow</a> (<a href="/usr/share/doc/libghc-mtl-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="/usr/share/doc/ghc-doc/html/libraries/base-4.6.0.1/Data-Monoid.html#t:Monoid">Monoid</a> w, <a href="Control-Monad-Trans-Resource.html#t:MonadThrow">MonadThrow</a> m) => <a href="Control-Monad-Trans-Resource.html#t:MonadThrow">MonadThrow</a> (<a href="/usr/share/doc/libghc-mtl-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><div class="top"><p class="src"><span class="keyword">class</span> <a href="/usr/share/doc/ghc-doc/html/libraries/base-4.6.0.1/Control-Monad.html#t:Monad">Monad</a> m => <a name="t:MonadActive" class="def">MonadActive</a> m <span class="keyword">where</span><a href="src/Control-Monad-Trans-Resource.html#MonadActive" class="link">Source</a></p><div class="doc"><p>Determine if some monad is still active. This is intended to prevent usage
of a monadic state after it has been closed. This is necessary for such
cases as lazy I/O, where an unevaluated thunk may still refer to a
closed <code>ResourceT</code>.
</p><p>Since 0.3.0
</p></div><div class="subs methods"><p class="caption">Methods</p><p class="src"><a name="v:monadActive" class="def">monadActive</a> :: m <a href="/usr/share/doc/ghc-doc/html/libraries/base-4.6.0.1/Data-Bool.html#t:Bool">Bool</a><a href="src/Control-Monad-Trans-Resource.html#monadActive" class="link">Source</a></p></div><div class="subs instances"><p id="control.i:MonadActive" class="caption collapser" onclick="toggleSection('i:MonadActive')">Instances</p><div id="section.i:MonadActive" class="show"><table><tr><td class="src"><a href="Control-Monad-Trans-Resource.html#t:MonadActive">MonadActive</a> <a href="/usr/share/doc/ghc-doc/html/libraries/base-4.6.0.1/System-IO.html#t:IO">IO</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Control-Monad-Trans-Resource.html#t:MonadActive">MonadActive</a> <a href="/usr/share/doc/libghc-transformers-doc/html/Data-Functor-Identity.html#t:Identity">Identity</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Control-Monad-Trans-Resource.html#t:MonadActive">MonadActive</a> (<a href="/usr/share/doc/ghc-doc/html/libraries/base-4.6.0.1/Control-Monad-ST-Safe.html#t:ST">ST</a> s)</td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Control-Monad-Trans-Resource.html#t:MonadActive">MonadActive</a> (<a href="/usr/share/doc/ghc-doc/html/libraries/base-4.6.0.1/Control-Monad-ST-Lazy-Safe.html#t:ST">ST</a> s)</td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Control-Monad-Trans-Resource.html#t:MonadActive">MonadActive</a> m => <a href="Control-Monad-Trans-Resource.html#t:MonadActive">MonadActive</a> (<a href="/usr/share/doc/libghc-mtl-doc/html/Control-Monad-List.html#t:ListT">ListT</a> m)</td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Control-Monad-Trans-Resource.html#t:MonadActive">MonadActive</a> m => <a href="Control-Monad-Trans-Resource.html#t:MonadActive">MonadActive</a> (<a href="/usr/share/doc/libghc-transformers-doc/html/Control-Monad-Trans-Maybe.html#t:MaybeT">MaybeT</a> m)</td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Control-Monad-Trans-Resource.html#t:MonadActive">MonadActive</a> m => <a href="Control-Monad-Trans-Resource.html#t:MonadActive">MonadActive</a> (<a href="/usr/share/doc/libghc-transformers-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="/usr/share/doc/libghc-transformers-doc/html/Control-Monad-IO-Class.html#t:MonadIO">MonadIO</a> m, <a href="Control-Monad-Trans-Resource.html#t:MonadActive">MonadActive</a> m) => <a href="Control-Monad-Trans-Resource.html#t:MonadActive">MonadActive</a> (<a href="Control-Monad-Trans-Resource.html#t:ResourceT">ResourceT</a> m)</td><td class="doc empty"> </td></tr><tr><td class="src">(<a href="/usr/share/doc/libghc-mtl-doc/html/Control-Monad-Error-Class.html#t:Error">Error</a> e, <a href="Control-Monad-Trans-Resource.html#t:MonadActive">MonadActive</a> m) => <a href="Control-Monad-Trans-Resource.html#t:MonadActive">MonadActive</a> (<a href="/usr/share/doc/libghc-mtl-doc/html/Control-Monad-Error.html#t:ErrorT">ErrorT</a> e m)</td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Control-Monad-Trans-Resource.html#t:MonadActive">MonadActive</a> m => <a href="Control-Monad-Trans-Resource.html#t:MonadActive">MonadActive</a> (<a href="/usr/share/doc/libghc-mtl-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-Trans-Resource.html#t:MonadActive">MonadActive</a> m => <a href="Control-Monad-Trans-Resource.html#t:MonadActive">MonadActive</a> (<a href="/usr/share/doc/libghc-mtl-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-Trans-Resource.html#t:MonadActive">MonadActive</a> m => <a href="Control-Monad-Trans-Resource.html#t:MonadActive">MonadActive</a> (<a href="/usr/share/doc/libghc-mtl-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="/usr/share/doc/ghc-doc/html/libraries/base-4.6.0.1/Data-Monoid.html#t:Monoid">Monoid</a> w, <a href="Control-Monad-Trans-Resource.html#t:MonadActive">MonadActive</a> m) => <a href="Control-Monad-Trans-Resource.html#t:MonadActive">MonadActive</a> (<a href="/usr/share/doc/libghc-mtl-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="/usr/share/doc/ghc-doc/html/libraries/base-4.6.0.1/Data-Monoid.html#t:Monoid">Monoid</a> w, <a href="Control-Monad-Trans-Resource.html#t:MonadActive">MonadActive</a> m) => <a href="Control-Monad-Trans-Resource.html#t:MonadActive">MonadActive</a> (<a href="/usr/share/doc/libghc-mtl-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="/usr/share/doc/ghc-doc/html/libraries/base-4.6.0.1/Data-Monoid.html#t:Monoid">Monoid</a> w, <a href="Control-Monad-Trans-Resource.html#t:MonadActive">MonadActive</a> m) => <a href="Control-Monad-Trans-Resource.html#t:MonadActive">MonadActive</a> (<a href="/usr/share/doc/libghc-mtl-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="/usr/share/doc/ghc-doc/html/libraries/base-4.6.0.1/Data-Monoid.html#t:Monoid">Monoid</a> w, <a href="Control-Monad-Trans-Resource.html#t:MonadActive">MonadActive</a> m) => <a href="Control-Monad-Trans-Resource.html#t:MonadActive">MonadActive</a> (<a href="/usr/share/doc/libghc-mtl-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><div class="top"><p class="src"><span class="keyword">type</span> <a name="t:MonadResourceBase" class="def">MonadResourceBase</a> m = (<a href="Control-Monad-Trans-Resource.html#t:MonadBaseControl">MonadBaseControl</a> <a href="/usr/share/doc/ghc-doc/html/libraries/base-4.6.0.1/System-IO.html#t:IO">IO</a> m, <a href="Control-Monad-Trans-Resource.html#t:MonadThrow">MonadThrow</a> m, <a href="Control-Monad-Trans-Resource.html#t:MonadUnsafeIO">MonadUnsafeIO</a> m, <a href="/usr/share/doc/libghc-transformers-doc/html/Control-Monad-IO-Class.html#t:MonadIO">MonadIO</a> m, <a href="/usr/share/doc/ghc-doc/html/libraries/base-4.6.0.1/Control-Applicative.html#t:Applicative">Applicative</a> m)<a href="src/Control-Monad-Trans-Resource.html#MonadResourceBase" class="link">Source</a></p><div class="doc"><p>A <code>Monad</code> which can be used as a base for a <code>ResourceT</code>.
</p><p>A <code>ResourceT</code> has some restrictions on its base monad:
</p><ul><li> <code>runResourceT</code> requires an instance of <code>MonadBaseControl IO</code>.
* <code>MonadResource</code> requires an instance of <code>MonadThrow</code>, <code>MonadUnsafeIO</code>, <code>MonadIO</code>, and <code>Applicative</code>.
</li></ul><p>While any instance of <code>MonadBaseControl IO</code> should be an instance of the
other classes, this is not guaranteed by the type system (e.g., you may have
a transformer in your stack with does not implement <code>MonadThrow</code>). Ideally,
we would like to simply create an alias for the five type classes listed,
but this is not possible with GHC currently.
</p><p>Instead, this typeclass acts as a proxy for the other five. Its only purpose
is to make your type signatures shorter.
</p><p>Note that earlier versions of <code>conduit</code> had a typeclass <code>ResourceIO</code>. This
fulfills much the same role.
</p><p>Since 0.3.2
</p></div></div><h2 id="g:8">Low-level
</h2><div class="top"><p class="src"><span class="keyword">data</span> <a name="t:InvalidAccess" class="def">InvalidAccess</a> <a href="src/Control-Monad-Trans-Resource.html#InvalidAccess" class="link">Source</a></p><div class="doc"><p>Indicates either an error in the library, or misuse of it (e.g., a
<code>ResourceT</code>'s state is accessed after being released).
</p><p>Since 0.3.0
</p></div><div class="subs constructors"><p class="caption">Constructors</p><table><tr><td class="src"><a name="v:InvalidAccess" class="def">InvalidAccess</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:functionName" class="def">functionName</a> :: <a href="/usr/share/doc/ghc-doc/html/libraries/base-4.6.0.1/Data-String.html#t:String">String</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:InvalidAccess" class="caption collapser" onclick="toggleSection('i:InvalidAccess')">Instances</p><div id="section.i:InvalidAccess" class="show"><table><tr><td class="src"><a href="/usr/share/doc/ghc-doc/html/libraries/base-4.6.0.1/Text-Show.html#t:Show">Show</a> <a href="Control-Monad-Trans-Resource.html#t:InvalidAccess">InvalidAccess</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a href="/usr/share/doc/ghc-doc/html/libraries/base-4.6.0.1/Data-Typeable-Internal.html#t:Typeable">Typeable</a> <a href="Control-Monad-Trans-Resource.html#t:InvalidAccess">InvalidAccess</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a href="/usr/share/doc/ghc-doc/html/libraries/base-4.6.0.1/Control-Exception-Base.html#t:Exception">Exception</a> <a href="Control-Monad-Trans-Resource.html#t:InvalidAccess">InvalidAccess</a></td><td class="doc empty"> </td></tr></table></div></div></div><h1 id="g:9">Re-exports
</h1><div class="top"><p class="src"><span class="keyword">class</span> <a href="/usr/share/doc/libghc-transformers-base-doc/html/Control-Monad-Base.html#t:MonadBase">MonadBase</a> b m => <a name="t:MonadBaseControl" class="def">MonadBaseControl</a> b m | m -> b</p><div class="subs instances"><p id="control.i:MonadBaseControl" class="caption collapser" onclick="toggleSection('i:MonadBaseControl')">Instances</p><div id="section.i:MonadBaseControl" class="show"><table><tr><td class="src"><a href="Control-Monad-Trans-Resource.html#t:MonadBaseControl">MonadBaseControl</a> [] []</td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Control-Monad-Trans-Resource.html#t:MonadBaseControl">MonadBaseControl</a> <a href="/usr/share/doc/ghc-doc/html/libraries/base-4.6.0.1/System-IO.html#t:IO">IO</a> <a href="/usr/share/doc/ghc-doc/html/libraries/base-4.6.0.1/System-IO.html#t:IO">IO</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Control-Monad-Trans-Resource.html#t:MonadBaseControl">MonadBaseControl</a> <a href="/usr/share/doc/ghc-doc/html/libraries/base-4.6.0.1/GHC-Conc.html#t:STM">STM</a> <a href="/usr/share/doc/ghc-doc/html/libraries/base-4.6.0.1/GHC-Conc.html#t:STM">STM</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Control-Monad-Trans-Resource.html#t:MonadBaseControl">MonadBaseControl</a> <a href="/usr/share/doc/ghc-doc/html/libraries/base-4.6.0.1/Data-Maybe.html#t:Maybe">Maybe</a> <a href="/usr/share/doc/ghc-doc/html/libraries/base-4.6.0.1/Data-Maybe.html#t:Maybe">Maybe</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Control-Monad-Trans-Resource.html#t:MonadBaseControl">MonadBaseControl</a> <a href="/usr/share/doc/libghc-transformers-doc/html/Data-Functor-Identity.html#t:Identity">Identity</a> <a href="/usr/share/doc/libghc-transformers-doc/html/Data-Functor-Identity.html#t:Identity">Identity</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Control-Monad-Trans-Resource.html#t:MonadBaseControl">MonadBaseControl</a> b m => <a href="Control-Monad-Trans-Resource.html#t:MonadBaseControl">MonadBaseControl</a> b (<a href="Control-Monad-Trans-Resource.html#t:ExceptionT">ExceptionT</a> m)</td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Control-Monad-Trans-Resource.html#t:MonadBaseControl">MonadBaseControl</a> b m => <a href="Control-Monad-Trans-Resource.html#t:MonadBaseControl">MonadBaseControl</a> b (<a href="Control-Monad-Trans-Resource.html#t:ResourceT">ResourceT</a> m)</td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Control-Monad-Trans-Resource.html#t:MonadBaseControl">MonadBaseControl</a> b m => <a href="Control-Monad-Trans-Resource.html#t:MonadBaseControl">MonadBaseControl</a> b (<a href="/usr/share/doc/libghc-transformers-doc/html/Control-Monad-Trans-Maybe.html#t:MaybeT">MaybeT</a> m)</td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Control-Monad-Trans-Resource.html#t:MonadBaseControl">MonadBaseControl</a> b m => <a href="Control-Monad-Trans-Resource.html#t:MonadBaseControl">MonadBaseControl</a> b (<a href="/usr/share/doc/libghc-mtl-doc/html/Control-Monad-List.html#t:ListT">ListT</a> m)</td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Control-Monad-Trans-Resource.html#t:MonadBaseControl">MonadBaseControl</a> b m => <a href="Control-Monad-Trans-Resource.html#t:MonadBaseControl">MonadBaseControl</a> b (<a href="/usr/share/doc/libghc-transformers-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="/usr/share/doc/ghc-doc/html/libraries/base-4.6.0.1/Data-Monoid.html#t:Monoid">Monoid</a> w, <a href="Control-Monad-Trans-Resource.html#t:MonadBaseControl">MonadBaseControl</a> b m) => <a href="Control-Monad-Trans-Resource.html#t:MonadBaseControl">MonadBaseControl</a> b (<a href="/usr/share/doc/libghc-mtl-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="/usr/share/doc/ghc-doc/html/libraries/base-4.6.0.1/Data-Monoid.html#t:Monoid">Monoid</a> w, <a href="Control-Monad-Trans-Resource.html#t:MonadBaseControl">MonadBaseControl</a> b m) => <a href="Control-Monad-Trans-Resource.html#t:MonadBaseControl">MonadBaseControl</a> b (<a href="/usr/share/doc/libghc-mtl-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-Trans-Resource.html#t:MonadBaseControl">MonadBaseControl</a> b m => <a href="Control-Monad-Trans-Resource.html#t:MonadBaseControl">MonadBaseControl</a> b (<a href="/usr/share/doc/libghc-mtl-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-Trans-Resource.html#t:MonadBaseControl">MonadBaseControl</a> b m => <a href="Control-Monad-Trans-Resource.html#t:MonadBaseControl">MonadBaseControl</a> b (<a href="/usr/share/doc/libghc-mtl-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-Trans-Resource.html#t:MonadBaseControl">MonadBaseControl</a> b m => <a href="Control-Monad-Trans-Resource.html#t:MonadBaseControl">MonadBaseControl</a> b (<a href="/usr/share/doc/libghc-mtl-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="/usr/share/doc/libghc-mtl-doc/html/Control-Monad-Error-Class.html#t:Error">Error</a> e, <a href="Control-Monad-Trans-Resource.html#t:MonadBaseControl">MonadBaseControl</a> b m) => <a href="Control-Monad-Trans-Resource.html#t:MonadBaseControl">MonadBaseControl</a> b (<a href="/usr/share/doc/libghc-mtl-doc/html/Control-Monad-Error.html#t:ErrorT">ErrorT</a> e m)</td><td class="doc empty"> </td></tr><tr><td class="src">(<a href="/usr/share/doc/ghc-doc/html/libraries/base-4.6.0.1/Data-Monoid.html#t:Monoid">Monoid</a> w, <a href="Control-Monad-Trans-Resource.html#t:MonadBaseControl">MonadBaseControl</a> b m) => <a href="Control-Monad-Trans-Resource.html#t:MonadBaseControl">MonadBaseControl</a> b (<a href="/usr/share/doc/libghc-mtl-doc/html/Control-Monad-RWS-Strict.html#t:RWST">RWST</a> r w s m)</td><td class="doc empty"> </td></tr><tr><td class="src">(<a href="/usr/share/doc/ghc-doc/html/libraries/base-4.6.0.1/Data-Monoid.html#t:Monoid">Monoid</a> w, <a href="Control-Monad-Trans-Resource.html#t:MonadBaseControl">MonadBaseControl</a> b m) => <a href="Control-Monad-Trans-Resource.html#t:MonadBaseControl">MonadBaseControl</a> b (<a href="/usr/share/doc/libghc-mtl-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-Trans-Resource.html#t:MonadBaseControl">MonadBaseControl</a> ((->) r) ((->) r)</td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Control-Monad-Trans-Resource.html#t:MonadBaseControl">MonadBaseControl</a> (<a href="/usr/share/doc/ghc-doc/html/libraries/base-4.6.0.1/Data-Either.html#t:Either">Either</a> e) (<a href="/usr/share/doc/ghc-doc/html/libraries/base-4.6.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-Trans-Resource.html#t:MonadBaseControl">MonadBaseControl</a> (<a href="/usr/share/doc/ghc-doc/html/libraries/base-4.6.0.1/Control-Monad-ST-Safe.html#t:ST">ST</a> s) (<a href="/usr/share/doc/ghc-doc/html/libraries/base-4.6.0.1/Control-Monad-ST-Safe.html#t:ST">ST</a> s)</td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Control-Monad-Trans-Resource.html#t:MonadBaseControl">MonadBaseControl</a> (<a href="/usr/share/doc/ghc-doc/html/libraries/base-4.6.0.1/Control-Monad-ST-Lazy-Safe.html#t:ST">ST</a> s) (<a href="/usr/share/doc/ghc-doc/html/libraries/base-4.6.0.1/Control-Monad-ST-Lazy-Safe.html#t:ST">ST</a> s)</td><td class="doc empty"> </td></tr></table></div></div></div><h1 id="g:10">Internal state
</h1><div class="doc"><p>A <code>ResourceT</code> internally is a modified <code>ReaderT</code> monad transformer holding
onto a mutable reference to all of the release actions still remaining to be
performed. If you are building up a custom application monad, it may be more
efficient to embed this <code>ReaderT</code> functionality directly in your own monad
instead of wrapping around <code>ResourceT</code> itself. This section provides you the
means of doing so.
</p></div><div class="top"><p class="src"><span class="keyword">type</span> <a name="t:InternalState" class="def">InternalState</a> = <a href="/usr/share/doc/ghc-doc/html/libraries/base-4.6.0.1/Data-IORef.html#t:IORef">IORef</a> ReleaseMap<a href="src/Control-Monad-Trans-Resource.html#InternalState" class="link">Source</a></p><div class="doc"><p>The internal state held by a <code>ResourceT</code> transformer.
</p><p>Since 0.4.6
</p></div></div><div class="top"><p class="src"><a name="v:getInternalState" class="def">getInternalState</a> :: <a href="/usr/share/doc/ghc-doc/html/libraries/base-4.6.0.1/Control-Monad.html#t:Monad">Monad</a> m => <a href="Control-Monad-Trans-Resource.html#t:ResourceT">ResourceT</a> m <a href="Control-Monad-Trans-Resource.html#t:InternalState">InternalState</a><a href="src/Control-Monad-Trans-Resource.html#getInternalState" class="link">Source</a></p><div class="doc"><p>Get the internal state of the current <code>ResourceT</code>.
</p><p>Since 0.4.6
</p></div></div><div class="top"><p class="src"><a name="v:runInternalState" class="def">runInternalState</a> :: <a href="Control-Monad-Trans-Resource.html#t:ResourceT">ResourceT</a> m a -> <a href="Control-Monad-Trans-Resource.html#t:InternalState">InternalState</a> -> m a<a href="src/Control-Monad-Trans-Resource.html#runInternalState" class="link">Source</a></p><div class="doc"><p>Unwrap a <code>ResourceT</code> using the given <code>InternalState</code>.
</p><p>Since 0.4.6
</p></div></div><div class="top"><p class="src"><a name="v:withInternalState" class="def">withInternalState</a> :: (<a href="Control-Monad-Trans-Resource.html#t:InternalState">InternalState</a> -> m a) -> <a href="Control-Monad-Trans-Resource.html#t:ResourceT">ResourceT</a> m a<a href="src/Control-Monad-Trans-Resource.html#withInternalState" class="link">Source</a></p></div></div></div><div id="footer"><p>Produced by <a href="http://www.haskell.org/haddock/">Haddock</a> version 2.13.2</p></div></body></html>
|