@@ -16,7 +16,6 @@ module File.IO
18import Control.Exception (catch)
18import Control.Exception (catch)
19−import Control.Monad.Trans (liftIO)
20import qualified Data.Binary as Binary
19import qualified Data.Binary as Binary
21import qualified Data.ByteString as BS
20import qualified Data.ByteString as BS
22import qualified Data.ByteString.Internal as BS
21import qualified Data.ByteString.Internal as BS
@@ -30,45 +29,33 @@ import qualified System.FilePath as FP
30import qualified System.IO as IO
29import qualified System.IO as IO
31import System.IO.Error (ioeGetErrorType, annotateIOError, modifyIOError)
30import System.IO.Error (ioeGetErrorType, annotateIOError, modifyIOError)
33−import qualified Elm.PerUserCache as PerUserCache
34−import qualified Reporting.Exit as Exit
35−import qualified Reporting.Exit.Assets as E
36−import qualified Reporting.Task as Task
43−writeBinary :: (Binary.Binary a) => FilePath -> a -> Task.Task ()
37+writeBinary :: (Binary.Binary a) => FilePath -> a -> IO ()
44writeBinary path value =
38writeBinary path value =
46− do let dir = FP.dropFileName path
39+ do let dir = FP.dropFileName path
47− Dir.createDirectoryIfMissing True dir
40+ Dir.createDirectoryIfMissing True dir
48− Binary.encodeFile path value
41+ Binary.encodeFile path value
51−readBinary :: (Binary.Binary a) => FilePath -> Task.Task a
44+readBinary :: (Binary.Binary a) => FilePath -> IO (Maybe a)
52readBinary path =
45readBinary path =
53− do exists_ <- liftIO (Dir.doesFileExist path)
46+ do exists_ <- Dir.doesFileExist path
54 if not exists_
47 if not exists_
55− then throwCorruptBinary path
48+ then return Nothing
57− do result <- liftIO (Binary.decodeFileOrFail path)
50+ do result <- Binary.decodeFileOrFail path
58 case result of
51 case result of
60− throwCorruptBinary path
53+ return Nothing
62 Right value ->
55 Right value ->
63 return value
56 return value
66−throwCorruptBinary :: FilePath -> Task.Task a
67−throwCorruptBinary filePath =
68− do elmHome <- liftIO PerUserCache.getElmHome
69− Task.throw (Exit.Assets (E.CorruptBinary elmHome filePath))
73-- WRITE UTF-8
60-- WRITE UTF-8
@@ -188,22 +175,21 @@ putHelp source sink =
191−exists :: FilePath -> Task.Task_ e Bool
178+exists :: FilePath -> IO Bool
192−exists filePath =
179+exists =
193− liftIO $ Dir.doesFileExist filePath
180+ Dir.doesFileExist
197-- REMOVE FILES
184-- REMOVE FILES
200−remove :: FilePath -> Task.Task_ e ()
187+remove :: FilePath -> IO ()
201remove filePath =
188remove filePath =
203− do exists_ <- Dir.doesFileExist filePath
189+ do exists_ <- Dir.doesFileExist filePath
204− if exists_
190+ if exists_
205− then Dir.removeFile filePath
191+ then Dir.removeFile filePath
206− else return ()
192+ else return ()
209removeDir :: FilePath -> IO ()
195removeDir :: FilePath -> IO ()