The safeio package

[ Tags: io, library, mit ] [ Propose Tags ]

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

[Skip to Readme]


Change log ChangeLog
Dependencies base (>4.8 && <5), bytestring, conduit (>=1.0), conduit-combinators, directory, exceptions, filepath, resourcet, unix [details]
License MIT
Author Luis Pedro Coelho
Maintainer Luis Pedro Coelho
Category IO
Home page
Bug tracker
Source repository head: git clone
Uploaded Thu Jan 18 09:09:46 UTC 2018 by luispedro
Distributions LTSHaskell:, NixOS:, Stackage:, Tumbleweed:
Downloads 669 total (293 in the last 30 days)
Rating (no votes yet) [estimated by rule of succession]
Your Rating
  • λ
  • λ
  • λ
Status Docs available [build log]
Last success reported on 2018-01-18 [all 1 reports]
Hackage Matrix CI




Maintainer's Corner

For package maintainers and hackage trustees

Readme for safeio-

[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.


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.


Luis Pedro Coelho | Email | Twitter