Copyright | Ivan Lazar Miljenovic |
---|---|
License | MIT |
Maintainer | Ivan.Miljenovic@gmail.com |
Safe Haskell | None |
Language | Haskell2010 |
- withFile :: (MonadMask m, MonadIO m) => FilePath -> IOMode -> (Handle -> m r) -> m r
- withBinaryFile :: (MonadMask m, MonadIO m) => FilePath -> IOMode -> (Handle -> m r) -> m r
- writeBinaryFile :: (MonadMask m, MonadIO m) => FilePath -> ByteString m r -> m r
- appendBinaryFile :: (MonadMask m, MonadIO m) => FilePath -> ByteString m r -> m r
- withBinaryFileContents :: (MonadMask m, MonadIO m, MonadIO n) => FilePath -> (ByteString n () -> m r) -> m r
- withSystemTempFile :: (MonadIO m, MonadMask m) => String -> ((FilePath, Handle) -> m r) -> m r
- withTempFile :: (MonadIO m, MonadMask m) => FilePath -> String -> ((FilePath, Handle) -> m r) -> m r
- withSystemTempDirectory :: (MonadIO m, MonadMask m) => String -> (FilePath -> m a) -> m a
- withTempDirectory :: (MonadMask m, MonadIO m) => FilePath -> String -> (FilePath -> m a) -> m a
- class MonadCatch m => MonadMask (m :: * -> *)
- bracket :: MonadMask m => m a -> (a -> m b) -> (a -> m c) -> m c
File-handling
withFile :: (MonadMask m, MonadIO m) => FilePath -> IOMode -> (Handle -> m r) -> m r Source #
A lifted variant of withFile
.
You almost definitely don't want to use this; instead, use
withBinaryFile
in conjunction with Data.ByteString.Streaming.
withBinaryFile :: (MonadMask m, MonadIO m) => FilePath -> IOMode -> (Handle -> m r) -> m r Source #
A lifted variant of withBinaryFile
.
Common file-handling cases
writeBinaryFile :: (MonadMask m, MonadIO m) => FilePath -> ByteString m r -> m r Source #
Write to the specified file.
appendBinaryFile :: (MonadMask m, MonadIO m) => FilePath -> ByteString m r -> m r Source #
Append to the specified file.
withBinaryFileContents :: (MonadMask m, MonadIO m, MonadIO n) => FilePath -> (ByteString n () -> m r) -> m r Source #
Apply a function to the contents of the file.
Note that a different monadic stack is allowed for the
ByteString
input, as long as it later gets resolved to the
required output type (e.g. remove transformer).
Temporary files
:: (MonadIO m, MonadMask m) | |
=> String | File name template. See |
-> ((FilePath, Handle) -> m r) | |
-> m r |
/This is withSystemTempFile
from the temporary
package with
the continuation re-structured to only take one argument./
Create and use a temporary file in the system standard temporary directory.
Behaves exactly the same as withTempFile
, except that the
parent temporary directory will be that returned by
getCanonicalTemporaryDirectory
.
Since: 0.1.1.0
:: (MonadIO m, MonadMask m) | |
=> FilePath | Temp dir to create the file in |
-> String | File name template. See
|
-> ((FilePath, Handle) -> m r) | |
-> m r |
/This is withTempFile
from the temporary
package with
the continuation re-structured to only take one argument./
Use a temporary filename that doesn't already exist.
Creates a new temporary file inside the given directory, making use of the template. The temp file is deleted after use. For example:
withTempFile "src" "sdist." $ \(tmpFile, hFile) -> ...
The tmpFile
will be file in the given directory, e.g.
src/sdist.342
.
Since: 0.1.1.0
Re-exports
These functions are re-exported from the temporary package as-is as their structure already matches those found here.
Since: 0.1.1.0
:: (MonadIO m, MonadMask m) | |
=> String | Directory name template |
-> (FilePath -> m a) | Callback that can use the directory |
-> m a |
Create and use a temporary directory in the system standard temporary directory.
Behaves exactly the same as withTempDirectory
, except that the parent temporary directory
will be that returned by getCanonicalTemporaryDirectory
.
:: (MonadMask m, MonadIO m) | |
=> FilePath | Parent directory to create the directory in |
-> String | Directory name template |
-> (FilePath -> m a) | Callback that can use the directory |
-> m a |
Create and use a temporary directory inside the given directory.
The directory is deleted after use.
Re-exports
These may assist in writing your own bracket-style functions.
Note that not everything is re-exported: for example, Handle
isn't
re-exported for use with withFile
as it's unlikely that you will
write another wrapper around it, and furthermore it wouldn't be a
common enough extension to warrant it.
class MonadCatch m => MonadMask (m :: * -> *) #
A class for monads which provide for the ability to account for all
possible exit points from a computation, and to mask asynchronous
exceptions. Continuation-based monads, and stacks such as ErrorT e IO
which provide for multiple failure modes, are invalid instances of this
class.
Note that this package does provide a MonadMask
instance for CatchT
.
This instance is only valid if the base monad provides no ability to
provide multiple exit. For example, IO
or Either
would be invalid base
monads, but Reader
or State
would be acceptable.
Instances should ensure that, in the following code:
f `finally` g
The action g
is called regardless of what occurs within f
, including
async exceptions.
MonadMask IO | |
(~) * e SomeException => MonadMask (Either e) | Since: 0.8.3 |
MonadMask m => MonadMask (StateT s m) | |
MonadMask m => MonadMask (StateT s m) | |
(MonadMask m, Monoid w) => MonadMask (WriterT w m) | |
(MonadMask m, Monoid w) => MonadMask (WriterT w m) | |
MonadMask m => MonadMask (IdentityT * m) | |
MonadMask m => MonadMask (ReaderT * r m) | |
(MonadMask m, Monoid w) => MonadMask (RWST r w s m) | |
(MonadMask m, Monoid w) => MonadMask (RWST r w s m) | |
bracket :: MonadMask m => m a -> (a -> m b) -> (a -> m c) -> m c #
Generalized abstracted pattern of safe resource acquisition and release
in the face of exceptions. The first action "acquires" some value, which
is "released" by the second action at the end. The third action "uses"
the value and its result is the result of the bracket
.
If an exception occurs during the use, the release still happens before the exception is rethrown.