This file is indexed.

/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 =&gt; <a href="Control-Monad-Trans-Resource.html#t:ResourceT">ResourceT</a> m a -&gt; 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 =&gt; <a href="Control-Monad-Trans-Resource.html#t:ResourceT">ResourceT</a> m () -&gt; <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 -&gt; n b) -&gt; <a href="Control-Monad-Trans-Resource.html#t:ResourceT">ResourceT</a> m a -&gt; <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 -&gt; <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 =&gt; <a href="Control-Monad-Trans-Resource.html#t:ExceptionT">ExceptionT</a> m a -&gt; 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 -&gt; <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 -&gt; a</li><li class="src short"><a href="#v:allocate">allocate</a> :: <a href="Control-Monad-Trans-Resource.html#t:MonadResource">MonadResource</a> m =&gt; <a href="/usr/share/doc/ghc-doc/html/libraries/base-4.6.0.1/System-IO.html#t:IO">IO</a> a -&gt; (a -&gt; <a href="/usr/share/doc/ghc-doc/html/libraries/base-4.6.0.1/System-IO.html#t:IO">IO</a> ()) -&gt; 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 =&gt; <a href="/usr/share/doc/ghc-doc/html/libraries/base-4.6.0.1/System-IO.html#t:IO">IO</a> () -&gt; 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 =&gt; <a href="Control-Monad-Trans-Resource.html#t:ReleaseKey">ReleaseKey</a> -&gt; 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 =&gt; <a href="Control-Monad-Trans-Resource.html#t:ReleaseKey">ReleaseKey</a> -&gt; 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 =&gt; ((<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 -&gt; <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) -&gt; <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) -&gt; 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) =&gt; <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 -&gt; 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 =&gt; <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 -&gt; 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 =&gt; <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 =&gt; e -&gt; 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 =&gt; <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 =&gt; <a href="#t:MonadBaseControl">MonadBaseControl</a> b m | m -&gt; 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 =&gt; <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 -&gt; <a href="Control-Monad-Trans-Resource.html#t:InternalState">InternalState</a> -&gt; m a</li><li class="src short"><a href="#v:withInternalState">withInternalState</a> ::  (<a href="Control-Monad-Trans-Resource.html#t:InternalState">InternalState</a> -&gt; m a) -&gt; <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">&nbsp;</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">&nbsp;</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 =&gt; <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">&nbsp;</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 =&gt; <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">&nbsp;</td></tr><tr><td class="src"><a href="Control-Monad-Trans-Resource.html#t:MonadBaseControl">MonadBaseControl</a> b m =&gt; <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">&nbsp;</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 =&gt; <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">&nbsp;</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 =&gt; <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">&nbsp;</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 =&gt; <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">&nbsp;</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 =&gt; <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">&nbsp;</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 =&gt; <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">&nbsp;</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 =&gt; <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">&nbsp;</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 =&gt; <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">&nbsp;</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 =&gt; <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">&nbsp;</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 =&gt; <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">&nbsp;</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 =&gt; <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">&nbsp;</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) =&gt; <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">&nbsp;</td></tr><tr><td class="src"><a href="Control-Monad-Trans-Resource.html#t:MonadThrow">MonadThrow</a> m =&gt; <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">&nbsp;</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) =&gt; <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">&nbsp;</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">&nbsp;</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 =&gt; <a href="Control-Monad-Trans-Resource.html#t:ResourceT">ResourceT</a> m a -&gt; 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 =&gt; <a href="Control-Monad-Trans-Resource.html#t:ResourceT">ResourceT</a> m () -&gt; <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 -&gt; n b) -&gt; <a href="Control-Monad-Trans-Resource.html#t:ResourceT">ResourceT</a> m a -&gt; <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 -&gt; <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">&nbsp;</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">&nbsp;</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">&nbsp;</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">&nbsp;</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 =&gt; <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">&nbsp;</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 =&gt; <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">&nbsp;</td></tr><tr><td class="src"><a href="Control-Monad-Trans-Resource.html#t:MonadBaseControl">MonadBaseControl</a> b m =&gt; <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">&nbsp;</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 =&gt; <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">&nbsp;</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 =&gt; <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">&nbsp;</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 =&gt; <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">&nbsp;</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 =&gt; <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">&nbsp;</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 =&gt; <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">&nbsp;</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 =&gt; <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">&nbsp;</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 =&gt; <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">&nbsp;</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 =&gt; <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">&nbsp;</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 =&gt; <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">&nbsp;</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 =&gt; <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">&nbsp;</td></tr><tr><td class="src"><a href="Control-Monad-Trans-Resource.html#t:MonadResource">MonadResource</a> m =&gt; <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">&nbsp;</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 =&gt; <a href="Control-Monad-Trans-Resource.html#t:ExceptionT">ExceptionT</a> m a -&gt; 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 -&gt; <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 -&gt; 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">&nbsp;</td></tr><tr><td class="src">=&gt; <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">-&gt; (a -&gt; <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">-&gt; m (<a href="Control-Monad-Trans-Resource.html#t:ReleaseKey">ReleaseKey</a>, a)</td><td class="doc empty">&nbsp;</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 =&gt; <a href="/usr/share/doc/ghc-doc/html/libraries/base-4.6.0.1/System-IO.html#t:IO">IO</a> () -&gt; 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 =&gt; <a href="Control-Monad-Trans-Resource.html#t:ReleaseKey">ReleaseKey</a> -&gt; 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 =&gt; <a href="Control-Monad-Trans-Resource.html#t:ReleaseKey">ReleaseKey</a> -&gt; 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 =&gt; ((<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 -&gt; <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) -&gt; <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) -&gt; 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) =&gt; <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 -&gt; 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 =&gt; <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">&nbsp;</td></tr><tr><td class="src"><a href="Control-Monad-Trans-Resource.html#t:MonadResource">MonadResource</a> m =&gt; <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">&nbsp;</td></tr><tr><td class="src"><a href="Control-Monad-Trans-Resource.html#t:MonadResource">MonadResource</a> m =&gt; <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">&nbsp;</td></tr><tr><td class="src"><a href="Control-Monad-Trans-Resource.html#t:MonadResource">MonadResource</a> m =&gt; <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">&nbsp;</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) =&gt; <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">&nbsp;</td></tr><tr><td class="src"><a href="Control-Monad-Trans-Resource.html#t:MonadResource">MonadResource</a> m =&gt; <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">&nbsp;</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) =&gt; <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">&nbsp;</td></tr><tr><td class="src"><a href="Control-Monad-Trans-Resource.html#t:MonadResource">MonadResource</a> m =&gt; <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">&nbsp;</td></tr><tr><td class="src"><a href="Control-Monad-Trans-Resource.html#t:MonadResource">MonadResource</a> m =&gt; <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">&nbsp;</td></tr><tr><td class="src"><a href="Control-Monad-Trans-Resource.html#t:MonadResource">MonadResource</a> m =&gt; <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">&nbsp;</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) =&gt; <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">&nbsp;</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) =&gt; <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">&nbsp;</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) =&gt; <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">&nbsp;</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) =&gt; <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">&nbsp;</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 =&gt; <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 -&gt; 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">&nbsp;</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)) =&gt; <a href="Control-Monad-Trans-Resource.html#t:MonadUnsafeIO">MonadUnsafeIO</a> (t m)</td><td class="doc empty">&nbsp;</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">&nbsp;</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">&nbsp;</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 =&gt; <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 =&gt; e -&gt; 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">&nbsp;</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">&nbsp;</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">&nbsp;</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">&nbsp;</td></tr><tr><td class="src"><a href="Control-Monad-Trans-Resource.html#t:MonadThrow">MonadThrow</a> m =&gt; <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">&nbsp;</td></tr><tr><td class="src"><a href="Control-Monad-Trans-Resource.html#t:MonadThrow">MonadThrow</a> m =&gt; <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">&nbsp;</td></tr><tr><td class="src"><a href="Control-Monad-Trans-Resource.html#t:MonadThrow">MonadThrow</a> m =&gt; <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">&nbsp;</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 =&gt; <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">&nbsp;</td></tr><tr><td class="src"><a href="Control-Monad-Trans-Resource.html#t:MonadThrow">MonadThrow</a> m =&gt; <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">&nbsp;</td></tr><tr><td class="src"><a href="Control-Monad-Trans-Resource.html#t:MonadThrow">MonadThrow</a> m =&gt; <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">&nbsp;</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) =&gt; <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">&nbsp;</td></tr><tr><td class="src"><a href="Control-Monad-Trans-Resource.html#t:MonadThrow">MonadThrow</a> m =&gt; <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">&nbsp;</td></tr><tr><td class="src"><a href="Control-Monad-Trans-Resource.html#t:MonadThrow">MonadThrow</a> m =&gt; <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">&nbsp;</td></tr><tr><td class="src"><a href="Control-Monad-Trans-Resource.html#t:MonadThrow">MonadThrow</a> m =&gt; <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">&nbsp;</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) =&gt; <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">&nbsp;</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) =&gt; <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">&nbsp;</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) =&gt; <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">&nbsp;</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) =&gt; <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">&nbsp;</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 =&gt; <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">&nbsp;</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">&nbsp;</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">&nbsp;</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">&nbsp;</td></tr><tr><td class="src"><a href="Control-Monad-Trans-Resource.html#t:MonadActive">MonadActive</a> m =&gt; <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">&nbsp;</td></tr><tr><td class="src"><a href="Control-Monad-Trans-Resource.html#t:MonadActive">MonadActive</a> m =&gt; <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">&nbsp;</td></tr><tr><td class="src"><a href="Control-Monad-Trans-Resource.html#t:MonadActive">MonadActive</a> m =&gt; <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">&nbsp;</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) =&gt; <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">&nbsp;</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) =&gt; <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">&nbsp;</td></tr><tr><td class="src"><a href="Control-Monad-Trans-Resource.html#t:MonadActive">MonadActive</a> m =&gt; <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">&nbsp;</td></tr><tr><td class="src"><a href="Control-Monad-Trans-Resource.html#t:MonadActive">MonadActive</a> m =&gt; <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">&nbsp;</td></tr><tr><td class="src"><a href="Control-Monad-Trans-Resource.html#t:MonadActive">MonadActive</a> m =&gt; <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">&nbsp;</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) =&gt; <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">&nbsp;</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) =&gt; <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">&nbsp;</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) =&gt; <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">&nbsp;</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) =&gt; <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">&nbsp;</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">&nbsp;</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">&nbsp;</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">&nbsp;</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">&nbsp;</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">&nbsp;</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 =&gt; <a name="t:MonadBaseControl" class="def">MonadBaseControl</a> b m | m -&gt; 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">&nbsp;</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">&nbsp;</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">&nbsp;</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">&nbsp;</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">&nbsp;</td></tr><tr><td class="src"><a href="Control-Monad-Trans-Resource.html#t:MonadBaseControl">MonadBaseControl</a> b m =&gt; <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">&nbsp;</td></tr><tr><td class="src"><a href="Control-Monad-Trans-Resource.html#t:MonadBaseControl">MonadBaseControl</a> b m =&gt; <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">&nbsp;</td></tr><tr><td class="src"><a href="Control-Monad-Trans-Resource.html#t:MonadBaseControl">MonadBaseControl</a> b m =&gt; <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">&nbsp;</td></tr><tr><td class="src"><a href="Control-Monad-Trans-Resource.html#t:MonadBaseControl">MonadBaseControl</a> b m =&gt; <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">&nbsp;</td></tr><tr><td class="src"><a href="Control-Monad-Trans-Resource.html#t:MonadBaseControl">MonadBaseControl</a> b m =&gt; <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">&nbsp;</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) =&gt; <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">&nbsp;</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) =&gt; <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">&nbsp;</td></tr><tr><td class="src"><a href="Control-Monad-Trans-Resource.html#t:MonadBaseControl">MonadBaseControl</a> b m =&gt; <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">&nbsp;</td></tr><tr><td class="src"><a href="Control-Monad-Trans-Resource.html#t:MonadBaseControl">MonadBaseControl</a> b m =&gt; <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">&nbsp;</td></tr><tr><td class="src"><a href="Control-Monad-Trans-Resource.html#t:MonadBaseControl">MonadBaseControl</a> b m =&gt; <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">&nbsp;</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) =&gt; <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">&nbsp;</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) =&gt; <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">&nbsp;</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) =&gt; <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">&nbsp;</td></tr><tr><td class="src"><a href="Control-Monad-Trans-Resource.html#t:MonadBaseControl">MonadBaseControl</a> ((-&gt;) r) ((-&gt;) r)</td><td class="doc empty">&nbsp;</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">&nbsp;</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">&nbsp;</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">&nbsp;</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 =&gt; <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 -&gt; <a href="Control-Monad-Trans-Resource.html#t:InternalState">InternalState</a> -&gt; 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> -&gt; m a) -&gt; <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>