This file is indexed.

/usr/share/doc/libghc-pipes-safe-doc/html/pipes-safe.txt is in libghc-pipes-safe-doc 2.2.4-3.

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
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
-- Hoogle documentation, generated by Haddock
-- See Hoogle, http://www.haskell.org/hoogle/


-- | Safety for the pipes ecosystem
--   
--   This package adds resource management and exception handling to the
--   <tt>pipes</tt> ecosystem.
--   
--   Notable features include:
--   
--   <ul>
--   <li><i>Resource Safety</i>: Guarantee finalization using
--   <tt>finally</tt>, <tt>bracket</tt> and more</li>
--   <li><i>Exception Safety</i>: Even against asynchronous
--   exceptions!</li>
--   <li><i>Laziness</i>: Only acquire resources when you need them</li>
--   <li><i>Promptness</i>: Finalize resources early when you are done with
--   them</li>
--   <li><i>Native Exception Handling</i>: Catch and resume from exceptions
--   inside pipes</li>
--   <li><i>No Buy-in</i>: Mix resource-safe pipes with unmanaged pipes
--   using <tt>hoist</tt></li>
--   </ul>
@package pipes-safe
@version 2.2.4


-- | This module provides an orphan <a>MonadCatch</a> instance for
--   <a>Proxy</a> of the form:
--   
--   <pre>
--   instance (MonadCatch m, MonadIO m) =&gt; MonadCatch (Proxy a' a b' b m) where
--   </pre>
--   
--   ... so you can throw and catch exceptions within pipes using all
--   <a>MonadCatch</a> operations.
--   
--   This module also provides generalized versions of some
--   <a>MonadCatch</a> operations so that you can also protect against
--   premature termination of connected components. For example, if you
--   protect a <a>readFile</a> computation using <a>bracket</a> from this
--   module:
--   
--   <pre>
--   -- readFile.hs
--   import Pipes
--   import qualified Pipes.Prelude as P
--   import Pipes.Safe
--   import qualified System.IO as IO
--   import Prelude hiding (readFile)
--   
--   readFile :: FilePath -&gt; Producer' String (SafeT IO) ()
--   readFile file = bracket
--       (do h &lt;- IO.openFile file IO.ReadMode
--           putStrLn $ "{" ++ file ++ " open}"
--           return h )
--       (\h -&gt; do
--           IO.hClose h
--           putStrLn $ "{" ++ file ++ " closed}" )
--       P.fromHandle
--   </pre>
--   
--   ... then this generalized <a>bracket</a> will guard against both
--   exceptions and premature termination of other pipes:
--   
--   <pre>
--   &gt;&gt;&gt; runSafeT $ runEffect $ readFile "readFile.hs" &gt;-&gt; P.take 4 &gt;-&gt; P.stdoutLn
--   {readFile.hs open}
--   -- readFile.hs
--   import Pipes
--   import qualified Pipes.Prelude as P
--   import Pipes.Safe
--   {readFile.hs closed}
--   </pre>
--   
--   Note that the <a>MonadCatch</a> instance for <a>Proxy</a> provides
--   weaker versions of <a>mask</a> and <a>uninterruptibleMask</a> that do
--   not completely prevent asynchronous exceptions. Instead, they provide
--   a weaker guarantee that asynchronous exceptions will only occur during
--   <a>await</a>s or <a>yield</a>s and nowhere else. For example, if you
--   write:
--   
--   <pre>
--   mask_ $ do
--       x &lt;- await
--       lift $ print x
--       lift $ print x
--   </pre>
--   
--   ... then you may receive an asynchronous exception during the
--   <a>await</a>, but you will not receive an asynchronous exception
--   during or in between the two <a>print</a> statements. This weaker
--   guarantee suffices to provide asynchronous exception safety.
module Pipes.Safe

-- | <a>SafeT</a> is a monad transformer that extends the base monad with
--   the ability to <a>register</a> and <a>release</a> finalizers.
--   
--   All unreleased finalizers are called at the end of the <a>SafeT</a>
--   block, even in the event of exceptions.
data SafeT m r

-- | Run the <a>SafeT</a> monad transformer, executing all unreleased
--   finalizers at the end of the computation
runSafeT :: (MonadMask m, MonadIO m) => SafeT m r -> m r

-- | Run <a>SafeT</a> in the base monad, executing all unreleased
--   finalizers at the end of the computation
--   
--   Use <a>runSafeP</a> to safely flush all unreleased finalizers and
--   ensure prompt finalization without exiting the <a>Proxy</a> monad.
runSafeP :: (MonadMask m, MonadIO m) => Effect (SafeT m) r -> Effect' m r

-- | Token used to <a>release</a> a previously <a>register</a>ed finalizer
data ReleaseKey

-- | <a>MonadSafe</a> lets you <a>register</a> and <a>release</a>
--   finalizers that execute in a <a>Base</a> monad
class (MonadCatch m, MonadMask m, MonadIO m, MonadIO (Base m)) => MonadSafe m where type Base (m :: * -> *) :: * -> * where {
    type family Base (m :: * -> *) :: * -> *;
}

-- | Lift an action from the <a>Base</a> monad
liftBase :: MonadSafe m => Base m r -> m r

-- | <a>register</a> a finalizer, ensuring that the finalizer gets called
--   if the finalizer is not <a>release</a>d before the end of the
--   surrounding <a>SafeT</a> block.
register :: MonadSafe m => Base m () -> m ReleaseKey

-- | <a>release</a> a registered finalizer
--   
--   You can safely call <a>release</a> more than once on the same
--   <a>ReleaseKey</a>. Every <a>release</a> after the first one does
--   nothing.
release :: MonadSafe m => ReleaseKey -> m ()

-- | Analogous to <a>onException</a> from <tt>Control.Monad.Catch</tt>,
--   except this also protects against premature termination
--   
--   <tt>(`onException` io)</tt> is a monad morphism.
onException :: (MonadSafe m) => m a -> Base m b -> m a

-- | Analogous to <a>finally</a> from <tt>Control.Monad.Catch</tt>, except
--   this also protects against premature termination
finally :: (MonadSafe m) => m a -> Base m b -> m a

-- | Analogous to <a>bracket</a> from <tt>Control.Monad.Catch</tt>, except
--   this also protects against premature termination
bracket :: (MonadSafe m) => Base m a -> (a -> Base m b) -> (a -> m c) -> m c

-- | Analogous to <a>bracket_</a> from <tt>Control.Monad.Catch</tt>, except
--   this also protects against premature termination
bracket_ :: (MonadSafe m) => Base m a -> Base m b -> m c -> m c

-- | Analogous to <a>bracketOnError</a> from <tt>Control.Monad.Catch</tt>,
--   except this also protects against premature termination
bracketOnError :: (MonadSafe m) => Base m a -> (a -> Base m b) -> (a -> m c) -> m c
instance Control.Monad.Base.MonadBase b m => Control.Monad.Base.MonadBase b (Pipes.Safe.SafeT m)
instance Control.Monad.IO.Class.MonadIO m => Control.Monad.IO.Class.MonadIO (Pipes.Safe.SafeT m)
instance Control.Monad.Catch.MonadMask m => Control.Monad.Catch.MonadMask (Pipes.Safe.SafeT m)
instance Control.Monad.Catch.MonadCatch m => Control.Monad.Catch.MonadCatch (Pipes.Safe.SafeT m)
instance Control.Monad.Catch.MonadThrow m => Control.Monad.Catch.MonadThrow (Pipes.Safe.SafeT m)
instance Control.Monad.Cont.Class.MonadCont m => Control.Monad.Cont.Class.MonadCont (Pipes.Safe.SafeT m)
instance Control.Monad.Writer.Class.MonadWriter w m => Control.Monad.Writer.Class.MonadWriter w (Pipes.Safe.SafeT m)
instance Control.Monad.State.Class.MonadState s m => Control.Monad.State.Class.MonadState s (Pipes.Safe.SafeT m)
instance Control.Monad.Error.Class.MonadError e m => Control.Monad.Error.Class.MonadError e (Pipes.Safe.SafeT m)
instance GHC.Base.MonadPlus m => GHC.Base.MonadPlus (Pipes.Safe.SafeT m)
instance GHC.Base.Monad m => GHC.Base.Monad (Pipes.Safe.SafeT m)
instance GHC.Base.Alternative m => GHC.Base.Alternative (Pipes.Safe.SafeT m)
instance GHC.Base.Applicative m => GHC.Base.Applicative (Pipes.Safe.SafeT m)
instance GHC.Base.Functor m => GHC.Base.Functor (Pipes.Safe.SafeT m)
instance Control.Monad.Catch.MonadThrow m => Control.Monad.Catch.MonadThrow (Pipes.Internal.Proxy a' a b' b m)
instance Control.Monad.Catch.MonadCatch m => Control.Monad.Catch.MonadCatch (Pipes.Internal.Proxy a' a b' b m)
instance (Control.Monad.Catch.MonadMask m, Control.Monad.IO.Class.MonadIO m) => Control.Monad.Catch.MonadMask (Pipes.Internal.Proxy a' a b' b m)
instance Control.Monad.Trans.Class.MonadTrans Pipes.Safe.SafeT
instance Control.Monad.Trans.Control.MonadBaseControl b m => Control.Monad.Trans.Control.MonadBaseControl b (Pipes.Safe.SafeT m)
instance (Control.Monad.IO.Class.MonadIO m, Control.Monad.Catch.MonadCatch m, Control.Monad.Catch.MonadMask m) => Pipes.Safe.MonadSafe (Pipes.Safe.SafeT m)
instance Pipes.Safe.MonadSafe m => Pipes.Safe.MonadSafe (Pipes.Internal.Proxy a' a b' b m)
instance Pipes.Safe.MonadSafe m => Pipes.Safe.MonadSafe (Control.Monad.Trans.Identity.IdentityT m)
instance Pipes.Safe.MonadSafe m => Pipes.Safe.MonadSafe (Control.Monad.Catch.Pure.CatchT m)
instance Pipes.Safe.MonadSafe m => Pipes.Safe.MonadSafe (Control.Monad.Trans.Reader.ReaderT i m)
instance Pipes.Safe.MonadSafe m => Pipes.Safe.MonadSafe (Control.Monad.Trans.State.Lazy.StateT s m)
instance Pipes.Safe.MonadSafe m => Pipes.Safe.MonadSafe (Control.Monad.Trans.State.Strict.StateT s m)
instance (Pipes.Safe.MonadSafe m, GHC.Base.Monoid w) => Pipes.Safe.MonadSafe (Control.Monad.Trans.Writer.Lazy.WriterT w m)
instance (Pipes.Safe.MonadSafe m, GHC.Base.Monoid w) => Pipes.Safe.MonadSafe (Control.Monad.Trans.Writer.Strict.WriterT w m)
instance (Pipes.Safe.MonadSafe m, GHC.Base.Monoid w) => Pipes.Safe.MonadSafe (Control.Monad.Trans.RWS.Lazy.RWST i w s m)
instance (Pipes.Safe.MonadSafe m, GHC.Base.Monoid w) => Pipes.Safe.MonadSafe (Control.Monad.Trans.RWS.Strict.RWST i w s m)


-- | Simple resource management functions
module Pipes.Safe.Prelude

-- | Acquire a <a>Handle</a> within <a>MonadSafe</a>
withFile :: (MonadSafe m) => FilePath -> IOMode -> (Handle -> m r) -> m r

-- | Read lines from a file, automatically opening and closing the file as
--   necessary
readFile :: (MonadSafe m) => FilePath -> Producer' String m ()

-- | Write lines to a file, automatically opening and closing the file as
--   necessary
writeFile :: (MonadSafe m) => FilePath -> Consumer' String m r