@@ -10,12 +10,14 @@ import System.Console.CmdArgs hiding (program)
1010import System.Directory
1111import System.Exit
1212import System.FilePath
13+import System.IO
1314import GHC.Conc
1415
1516import qualified Text.Blaze.Html.Renderer.Pretty as Pretty
1617import qualified Text.Blaze.Html.Renderer.String as Normal
1718import qualified Text.Jasmine as JS
1819import qualified Data.ByteString.Lazy.Char8 as BS
20+import qualified Data.ByteString.Lazy as L
1921
2022import qualified Metadata.Prelude as Prelude
2123import qualified Transform.Canonicalize as Canonical
@@ -91,8 +93,14 @@ elmi flags filePath = file flags filePath "elmi"
9193buildFile :: Flags -> Int -> Int -> Interfaces -> FilePath -> IO ModuleInterface
9294buildFile flags moduleNum numModules interfaces filePath =
9395 do compiled <- alreadyCompiled
94− if not compiled then compile
95− else getInterface `fmap` Binary.decodeFile (elmi flags filePath)
96+ case compiled of
97+ False -> compile
98+ True -> do
99+ handle <- openBinaryFile (elmi flags filePath) ReadMode
100+ bits <- L.hGetContents handle
101+ let iface = getInterface (Binary.decode bits)
102+ L.length bits `seq` hClose handle
103+ return iface
96104 where
97105 getInterface :: (String, ModuleInterface) -> ModuleInterface
98106 getInterface = snd
@@ -139,7 +147,9 @@ buildFile flags moduleNum numModules interfaces filePath =
139147 iAliases = aliases metaModule
140148 }
141149 createDirectoryIfMissing True . dropFileName $ elmi flags filePath
142− Binary.encodeFile (elmi flags filePath) (name,interface)
150+ handle <- openBinaryFile (elmi flags filePath) WriteMode
151+ L.hPut handle (Binary.encode (name,interface))
152+ hClose handle
143153 writeFile (elmo flags filePath) (jsModule metaModule)
144154 return interface
145155