@@ -1,6 +1,10 @@
11{-# LANGUAGE OverloadedStrings #-}
22module Reporting.Task
3− ( Task, Task_, run, throw, mapError
3+ ( Task, Task_
4+ , try
5+ , run
6+ , throw
7+ , mapError
48 , Env
59 , getPackageCacheDir
610 , getPackageCacheDirFor
@@ -23,7 +27,8 @@ import Control.Monad.Reader (ReaderT, runReaderT, ask, asks)
2327import Control.Monad.Trans (liftIO)
2428import qualified Network.HTTP.Client as Http
2529import qualified Network.HTTP.Client.TLS as Http
26−import System.Directory (createDirectoryIfMissing)
30+import qualified System.Directory as Dir
31+import qualified System.Exit as Exit
2732import System.FilePath ((</>))
2833import qualified System.IO as IO
2934
@@ -55,8 +60,8 @@ data Env =
5560 }
5661
5762
58−run :: Progress.Reporter -> Task a -> IO (Maybe a)
59−run (Progress.Reporter tell end) task =
63+try :: Progress.Reporter -> Task a -> IO (Maybe a)
64+try (Progress.Reporter tell end) task =
6065 do root <- PerUserCache.getPackageRoot
6166 pool <- initPool 4
6267 httpManager <- Http.newManager Http.tlsManagerSettings
@@ -72,6 +77,14 @@ run (Progress.Reporter tell end) task =
7277 return (Just answer)
7378
7479
80+run :: Progress.Reporter -> Task a -> IO ()
81+run reporter task =
82+ do maybeAnswer <- try reporter task
83+ case maybeAnswer of
84+ Nothing -> Exit.exitFailure
85+ Just _ -> return ()
86+
87+
7588throw :: e -> Task_ e a
7689throw =
7790 throwError
@@ -95,7 +108,7 @@ getPackageCacheDirFor :: Name -> Version -> Task_ e FilePath
95108getPackageCacheDirFor name version =
96109 do cacheDir <- getPackageCacheDir
97110 let dir = cacheDir </> Pkg.toFilePath name </> Pkg.versionToString version
98− liftIO (createDirectoryIfMissing True dir)
111+ liftIO (Dir.createDirectoryIfMissing True dir)
99112 return dir
100113
101114