safeio: Write output to disk atomically

This is a package candidate release! Here you can preview how this package release will appear once published to the main package index (which can be accomplished via the 'maintain' link below). Please note that once a package has been published to the main package index it cannot be undone! Please consult the package uploading documentation for more information.

[maintain] [Publish]

This package implements utilities to perform atomic output so as to avoid the problem of partial intermediate files.


[Skip to Readme]

Properties

Versions 0.0.1.0, 0.0.2.0, 0.0.2.0, 0.0.3.0, 0.0.4.0, 0.0.5.0, 0.0.6.0
Change log ChangeLog
Dependencies base (>4 && <5), bytestring, conduit (>=1.0), conduit-combinators, directory, filepath, resourcet, unix [details]
License MIT
Author Luis Pedro Coelho
Maintainer Luis Pedro Coelho
Category IO
Bug tracker https://github.com/luispedro/safeio/issues
Source repo head: git clone https://github.com/luispedro/safeio
Uploaded by luispedro at 2017-05-30T14:11:06Z

Modules

[Index]

Downloads

Maintainer's Corner

Package maintainers

For package maintainers and hackage trustees


Readme for safeio-0.0.2.0

[back to package description]

SafeIO: Haskell library for safe (atomic) IO

This is a simple module, which enables writing in atomic mode. It implements the following 4 step procedure:

  1. Open a temporary file in the same directory as the final output.
  2. Write to this temporary file.
  3. Close and sync the file.
  4. Atomically rename the file to its final destination.

Example

Direct use:

import System.IO.SafeWrite
...
main = do
    withOutputFile "output.txt" $ \hout -> do
        hPutStrLn hout "Hello World"

Through conduit:

import qualified Data.Conduit as C
import           Data.Conduit ((.|))
import           Data.Conduit.SafeWrite

main = C.runConduitRes $
    C.yield "Hello World" .| safeSinkFile "hello.txt"

In any case, only successful termination of the process will result in the output file being written. Early termination by throwing an exception will cause the temporary file to be removed and no output will be produced.

Author

Luis Pedro Coelho | Email | Twitter