atomic-write-0.2.0.4: src/System/AtomicWrite/Writer/String.hs
module System.AtomicWrite.Writer.String (atomicWriteFile, atomicWithFile) where
import System.AtomicWrite.Internal (closeAndRename, tempFileFor)
import System.IO (Handle, hPutStr)
-- | Creates a file atomically on POSIX-compliant systems while preserving
-- permissions.
atomicWriteFile ::
FilePath -- ^ The path where the file will be updated or created
-> String -- ^ The content to write to the file
-> IO ()
atomicWriteFile = (. flip hPutStr) . atomicWithFile
-- | A general version of 'atomicWriteFile'
atomicWithFile :: FilePath -> (Handle -> IO ()) -> IO ()
atomicWithFile f action =
tempFileFor f >>= \(tmpPath, h) -> action h >> closeAndRename h tmpPath f