on master help sign in
Stop relying on Task in File.IO
2760e84Evan Czaplicki
builder/src/File/IO.hs+17−31
@@ -16,7 +16,6 @@ module File.IO
16
16
17
17
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)
32
31
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
37−
38
32
39
33
40-- BINARY
34-- BINARY
41
35
42
36
43−writeBinary :: (Binary.Binary a) => FilePath -> a -> Task.Task ()
37+writeBinary :: (Binary.Binary a) => FilePath -> a -> IO ()
44writeBinary path value =
38writeBinary path value =
45− liftIO $
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
49
42
50
43
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
56 else
49 else
57− do result <- liftIO (Binary.decodeFileOrFail path)
50+ do result <- Binary.decodeFileOrFail path
58 case result of
51 case result of
59 Left _ ->
52 Left _ ->
60− throwCorruptBinary path
53+ return Nothing
61
54
62 Right value ->
55 Right value ->
63 return value
56 return value
64
57
65
58
66−throwCorruptBinary :: FilePath -> Task.Task a
67−throwCorruptBinary filePath =
68− do elmHome <- liftIO PerUserCache.getElmHome
69− Task.throw (Exit.Assets (E.CorruptBinary elmHome filePath))
70−
71−
72
59
73-- WRITE UTF-8
60-- WRITE UTF-8
74
61
@@ -188,22 +175,21 @@ putHelp source sink =
188-- EXISTS
175-- EXISTS
189
176
190
177
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
194
181
195
182
196
183
197-- REMOVE FILES
184-- REMOVE FILES
198
185
199
186
200−remove :: FilePath -> Task.Task_ e ()
187+remove :: FilePath -> IO ()
201remove filePath =
188remove filePath =
202− liftIO $
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 ()
207
193
208
194
209removeDir :: FilePath -> IO ()
195removeDir :: FilePath -> IO ()