diff options
| author | krasimir <krasimir@chalmers.se> | 2009-06-24 10:39:03 +0000 |
|---|---|---|
| committer | krasimir <krasimir@chalmers.se> | 2009-06-24 10:39:03 +0000 |
| commit | cf4efe0acc86f7e03327de6115355506bd8f18ba (patch) | |
| tree | 08c654d9fc42cc0e7fefdc0385ef782b3d46c20b | |
| parent | 9e3131f169d65034c67c19bf8549c099a3bbdddd (diff) | |
explicitly close the file handle in Data.Binary.decodeFile
| -rw-r--r-- | src/Data/Binary.hs | 11 |
1 files changed, 6 insertions, 5 deletions
diff --git a/src/Data/Binary.hs b/src/Data/Binary.hs index 310e73956..a0a0bc702 100644 --- a/src/Data/Binary.hs +++ b/src/Data/Binary.hs @@ -64,6 +64,7 @@ import Data.Binary.Put import Data.Binary.Get import Control.Monad +import Control.Exception import Foreign import System.IO @@ -270,11 +271,11 @@ encodeFile f v = L.writeFile f (encode v) -- or otherwise finalise the resource. -- decodeFile :: Binary a => FilePath -> IO a -decodeFile f = do - s <- L.readFile f - return $! runGet (do v <- get - m <- isEmpty - m `seq` return v) s +decodeFile f = bracket (openFile f ReadMode) hClose $ \h -> do + s <- L.hGetContents h + evaluate $ runGet (do v <- get + m <- isEmpty + m `seq` return v) s -- needs bytestring 0.9.1.x to work |
