@@ -10,12 +10,14 @@ import System.Console.CmdArgs hiding (program)
10import System.Directory
10import System.Directory
11import System.Exit
11import System.Exit
12import System.FilePath
12import System.FilePath
13import GHC.Conc
14import GHC.Conc
15import qualified Text.Blaze.Html.Renderer.Pretty as Pretty
16import qualified Text.Blaze.Html.Renderer.Pretty as Pretty
16import qualified Text.Blaze.Html.Renderer.String as Normal
17import qualified Text.Blaze.Html.Renderer.String as Normal
17import qualified Text.Jasmine as JS
18import qualified Text.Jasmine as JS
18import qualified Data.ByteString.Lazy.Char8 as BS
19import qualified Data.ByteString.Lazy.Char8 as BS
20+import qualified Data.ByteString.Lazy as L
20import qualified Metadata.Prelude as Prelude
22import qualified Metadata.Prelude as Prelude
21import qualified Transform.Canonicalize as Canonical
23import qualified Transform.Canonicalize as Canonical
@@ -91,8 +93,14 @@ elmi flags filePath = file flags filePath "elmi"
91buildFile :: Flags -> Int -> Int -> Interfaces -> FilePath -> IO ModuleInterface
93buildFile :: Flags -> Int -> Int -> Interfaces -> FilePath -> IO ModuleInterface
92buildFile flags moduleNum numModules interfaces filePath =
94buildFile flags moduleNum numModules interfaces filePath =
93 do compiled <- alreadyCompiled
95 do compiled <- alreadyCompiled
94− if not compiled then compile
96+ case compiled of
95− else getInterface `fmap` Binary.decodeFile (elmi flags filePath)
97+ False -> compile
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
97 getInterface :: (String, ModuleInterface) -> ModuleInterface
105 getInterface :: (String, ModuleInterface) -> ModuleInterface
98 getInterface = snd
106 getInterface = snd
@@ -139,7 +147,9 @@ buildFile flags moduleNum numModules interfaces filePath =
139 iAliases = aliases metaModule
147 iAliases = aliases metaModule
141 createDirectoryIfMissing True . dropFileName $ elmi flags filePath
149 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))
143 writeFile (elmo flags filePath) (jsModule metaModule)
153 writeFile (elmo flags filePath) (jsModule metaModule)
144 return interface
154 return interface