on master help sign in
Add MonadFail constraints in obelisk-cliapp
bffa932Ken Micklas
lib/cliapp/src/Obelisk/CliApp/Demo.hs+2−1
@@ -4,6 +4,7 @@
4module Obelisk.CliApp.Demo where
4module Obelisk.CliApp.Demo where
5
5
6import Control.Concurrent (threadDelay)
6import Control.Concurrent (threadDelay)
7+import Control.Monad.Fail
7import Control.Monad.IO.Class
8import Control.Monad.IO.Class
8import Data.Semigroup ((<>))
9import Data.Semigroup ((<>))
9import qualified Data.Text as T
10import qualified Data.Text as T
@@ -14,7 +15,7 @@ import Control.Monad.Catch (MonadMask)
14import Obelisk.CliApp
15import Obelisk.CliApp
15
16
16cliDemo
17cliDemo
17− :: ( MonadIO m, MonadMask m
18+ :: ( MonadIO m, MonadMask m, MonadFail m
18 , CliLog m, HasCliConfig e m, CliThrow e m, AsProcessFailure e, AsUnstructuredError e)
19 , CliLog m, HasCliConfig e m, CliThrow e m, AsProcessFailure e, AsUnstructuredError e)
19 => m ()
20 => m ()
20cliDemo = withSpinner "CLI Demo" $ do
21cliDemo = withSpinner "CLI Demo" $ do
lib/cliapp/src/Obelisk/CliApp/Process.hs+5−4
@@ -24,6 +24,7 @@ module Obelisk.CliApp.Process
24
24
25import Control.Monad ((<=<), join, void)
25import Control.Monad ((<=<), join, void)
26import Control.Monad.Except (throwError)
26import Control.Monad.Except (throwError)
27+import Control.Monad.Fail
27import Control.Monad.IO.Class (MonadIO, liftIO)
28import Control.Monad.IO.Class (MonadIO, liftIO)
28import Control.Lens (Prism', review)
29import Control.Lens (Prism', review)
29import qualified Data.ByteString as BS
30import qualified Data.ByteString as BS
@@ -60,7 +61,7 @@ instance AsProcessFailure ProcessFailure where
60 asProcessFailure = id
61 asProcessFailure = id
61
62
62readProcessAndLogStderr
63readProcessAndLogStderr
63− :: (MonadIO m, CliLog m, CliThrow e m, AsProcessFailure e)
64+ :: (MonadIO m, CliLog m, CliThrow e m, AsProcessFailure e, MonadFail m)
64 => Severity -> CreateProcess -> m Text
65 => Severity -> CreateProcess -> m Text
65readProcessAndLogStderr sev process = do
66readProcessAndLogStderr sev process = do
66 (out, _err) <- withProcess process $ \_out err -> do
67 (out, _err) <- withProcess process $ \_out err -> do
@@ -82,7 +83,7 @@ readCreateProcessWithExitCode process = do
82-- which case it is advisable to call it with a non-Error severity for stderr, like
83-- which case it is advisable to call it with a non-Error severity for stderr, like
83-- `callProcessAndLogOutput (Debug, Debug)`.
84-- `callProcessAndLogOutput (Debug, Debug)`.
84readProcessAndLogOutput
85readProcessAndLogOutput
85− :: (MonadIO m, CliLog m, CliThrow e m, AsProcessFailure e)
86+ :: (MonadIO m, CliLog m, CliThrow e m, AsProcessFailure e, MonadFail m)
86 => (Severity, Severity) -> CreateProcess -> m Text
87 => (Severity, Severity) -> CreateProcess -> m Text
87readProcessAndLogOutput (sev_out, sev_err) process = do
88readProcessAndLogOutput (sev_out, sev_err) process = do
88 (_, Just out, Just err, p) <- createProcess $ process
89 (_, Just out, Just err, p) <- createProcess $ process
@@ -106,7 +107,7 @@ readProcessAndLogOutput (sev_out, sev_err) process = do
106-- `callProcessAndLogOutput (Debug, Debug)`.
107-- `callProcessAndLogOutput (Debug, Debug)`.
107callProcessAndLogOutput
108callProcessAndLogOutput
108
109
109− :: (MonadIO m, CliLog m, CliThrow e m, AsProcessFailure e)
110+ :: (MonadIO m, CliLog m, CliThrow e m, AsProcessFailure e, MonadFail m)
110 => (Severity, Severity) -> CreateProcess -> m ()
111 => (Severity, Severity) -> CreateProcess -> m ()
111callProcessAndLogOutput (sev_out, sev_err) process =
112callProcessAndLogOutput (sev_out, sev_err) process =
112 void $ withProcess process $ \out err -> do
113 void $ withProcess process $ \out err -> do
@@ -150,7 +151,7 @@ callCommand cmd = do
150 liftIO $ Process.callCommand cmd
151 liftIO $ Process.callCommand cmd
151
152
152withProcess
153withProcess
153− :: (MonadIO m, CliLog m, CliThrow e m, AsProcessFailure e)
154+ :: (MonadIO m, CliLog m, CliThrow e m, AsProcessFailure e, MonadFail m)
154 => CreateProcess -> (Handle -> Handle -> m ()) -> m (Handle, Handle)
155 => CreateProcess -> (Handle -> Handle -> m ()) -> m (Handle, Handle)
155withProcess process f = do -- TODO: Use bracket.
156withProcess process f = do -- TODO: Use bracket.
156 -- FIXME: Using `withCreateProcess` here leads to something operating illegally on closed handles.
157 -- FIXME: Using `withCreateProcess` here leads to something operating illegally on closed handles.