{-# LANGUAGE ScopedTypeVariables, DeriveDataTypeable, OverloadedStrings,
FlexibleInstances, FlexibleContexts, IncoherentInstances,
TypeFamilies, ExistentialQuantification, RankNTypes,
ImpredicativeTypes #-}
{-# OPTIONS_GHC -fno-warn-orphans #-}
module Shelly.Lifted
(
MonadSh(..),
MonadShControl(..),
Sh, ShIO, S.shelly, S.shellyNoDir, S.shellyFailDir, sub
, silently, verbosely, escaping, print_stdout, print_stderr, print_commands
, tracing, errExit
, log_stdout_with, log_stderr_with
, run, run_, runFoldLines, S.cmd, S.FoldCallback
, (-|-), lastStderr, setStdin, lastExitCode
, command, command_, command1, command1_
, sshPairs, sshPairs_
, S.ShellCmd(..), S.CmdArg (..)
, runHandle, runHandles, transferLinesAndCombine, S.transferFoldHandleLines
, S.StdHandle(..), S.StdStream(..)
, setenv, get_env, get_env_text, get_env_all, appendToPath, prependToPath
, cd, chdir, chdir_p, pwd
, echo, echo_n, echo_err, echo_n_err, inspect, inspect_err
, tag, trace, S.show_command
, ls, lsT, test_e, test_f, test_d, test_s, test_px, which
, absPath, (S.</>), (S.<.>), canonic, canonicalize, relPath, relativeTo
, S.hasExt
, mv, rm, rm_f, rm_rf, cp, cp_r, mkdir, mkdir_p, mkdirTree
, readfile, readBinary, writefile, appendfile, touchfile, withTmpDir
, exit, errorExit, quietExit, terror
, bracket_sh, catchany, catch_sh, handle_sh, handleany_sh, finally_sh, catches_sh, catchany_sh
, S.toTextIgnore, toTextWarn, S.fromText
, S.whenM, S.unlessM, time, sleep
, liftIO, S.when, S.unless, FilePath, (S.<$>)
, Shelly.Lifted.get, Shelly.Lifted.put
, S.find, S.findWhen, S.findFold, S.findDirFilter, S.findDirFilterWhen, S.findFoldDirFilter
, followSymlink
) where
import qualified Shelly as S
import qualified Shelly.Base as S
import Shelly.Base ( Sh(..), ShIO, Text, (>=>) )
import Control.Monad ( liftM )
import Data.ByteString ( ByteString )
import Data.Tree ( Tree )
import System.IO ( Handle )
import Control.Exception.Lifted
import Control.Exception.Enclosed
import Control.Monad.IO.Class
import Control.Monad.Trans.Control
import Control.Monad.Trans.Identity
import Control.Monad.Trans.Maybe
import Control.Monad.Trans.Cont
import Control.Monad.Trans.Except
import Control.Monad.Trans.Reader
import Control.Monad.Trans.State
import qualified Control.Monad.Trans.State.Strict as Strict
import Control.Monad.Trans.Writer
import qualified Control.Monad.Trans.Writer.Strict as Strict
import qualified Control.Monad.Trans.RWS as RWS
import qualified Control.Monad.Trans.RWS.Strict as Strict
class Monad m => MonadSh m where
liftSh :: Sh a -> m a
instance MonadSh Sh where
liftSh :: forall a. Sh a -> Sh a
liftSh = Sh a -> Sh a
forall a. a -> a
id
instance MonadSh m => MonadSh (IdentityT m) where
liftSh :: forall a. Sh a -> IdentityT m a
liftSh = m a -> IdentityT m a
forall {k} (f :: k -> *) (a :: k). f a -> IdentityT f a
IdentityT (m a -> IdentityT m a) -> (Sh a -> m a) -> Sh a -> IdentityT m a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Sh a -> m a
forall a. Sh a -> m a
forall (m :: * -> *) a. MonadSh m => Sh a -> m a
liftSh
instance MonadSh m => MonadSh (MaybeT m) where
liftSh :: forall a. Sh a -> MaybeT m a
liftSh = m (Maybe a) -> MaybeT m a
forall (m :: * -> *) a. m (Maybe a) -> MaybeT m a
MaybeT (m (Maybe a) -> MaybeT m a)
-> (Sh a -> m (Maybe a)) -> Sh a -> MaybeT m a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (a -> Maybe a) -> m a -> m (Maybe a)
forall (m :: * -> *) a1 r. Monad m => (a1 -> r) -> m a1 -> m r
liftM a -> Maybe a
forall a. a -> Maybe a
Just (m a -> m (Maybe a)) -> (Sh a -> m a) -> Sh a -> m (Maybe a)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Sh a -> m a
forall a. Sh a -> m a
forall (m :: * -> *) a. MonadSh m => Sh a -> m a
liftSh
instance MonadSh m => MonadSh (ContT r m) where
liftSh :: forall a. Sh a -> ContT r m a
liftSh Sh a
m = ((a -> m r) -> m r) -> ContT r m a
forall {k} (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (Sh a -> m a
forall a. Sh a -> m a
forall (m :: * -> *) a. MonadSh m => Sh a -> m a
liftSh Sh a
m m a -> (a -> m r) -> m r
forall a b. m a -> (a -> m b) -> m b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>=)
instance (MonadSh m) => MonadSh (ExceptT e m) where
liftSh :: forall a. Sh a -> ExceptT e m a
liftSh Sh a
m = m (Either e a) -> ExceptT e m a
forall e (m :: * -> *) a. m (Either e a) -> ExceptT e m a
ExceptT (m (Either e a) -> ExceptT e m a)
-> m (Either e a) -> ExceptT e m a
forall a b. (a -> b) -> a -> b
$ do
a
a <- Sh a -> m a
forall a. Sh a -> m a
forall (m :: * -> *) a. MonadSh m => Sh a -> m a
liftSh Sh a
m
Either e a -> m (Either e a)
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (a -> Either e a
forall a b. b -> Either a b
Right a
a)
instance MonadSh m => MonadSh (ReaderT r m) where
liftSh :: forall a. Sh a -> ReaderT r m a
liftSh = (r -> m a) -> ReaderT r m a
forall r (m :: * -> *) a. (r -> m a) -> ReaderT r m a
ReaderT ((r -> m a) -> ReaderT r m a)
-> (Sh a -> r -> m a) -> Sh a -> ReaderT r m a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. m a -> r -> m a
forall a b. a -> b -> a
const (m a -> r -> m a) -> (Sh a -> m a) -> Sh a -> r -> m a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Sh a -> m a
forall a. Sh a -> m a
forall (m :: * -> *) a. MonadSh m => Sh a -> m a
liftSh
instance MonadSh m => MonadSh (StateT s m) where
liftSh :: forall a. Sh a -> StateT s m a
liftSh Sh a
m = (s -> m (a, s)) -> StateT s m a
forall s (m :: * -> *) a. (s -> m (a, s)) -> StateT s m a
StateT ((s -> m (a, s)) -> StateT s m a)
-> (s -> m (a, s)) -> StateT s m a
forall a b. (a -> b) -> a -> b
$ \s
s -> do
a
a <- Sh a -> m a
forall a. Sh a -> m a
forall (m :: * -> *) a. MonadSh m => Sh a -> m a
liftSh Sh a
m
(a, s) -> m (a, s)
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (a
a, s
s)
instance MonadSh m => MonadSh (Strict.StateT s m) where
liftSh :: forall a. Sh a -> StateT s m a
liftSh Sh a
m = (s -> m (a, s)) -> StateT s m a
forall s (m :: * -> *) a. (s -> m (a, s)) -> StateT s m a
Strict.StateT ((s -> m (a, s)) -> StateT s m a)
-> (s -> m (a, s)) -> StateT s m a
forall a b. (a -> b) -> a -> b
$ \s
s -> do
a
a <- Sh a -> m a
forall a. Sh a -> m a
forall (m :: * -> *) a. MonadSh m => Sh a -> m a
liftSh Sh a
m
(a, s) -> m (a, s)
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (a
a, s
s)
instance (Monoid w, MonadSh m) => MonadSh (WriterT w m) where
liftSh :: forall a. Sh a -> WriterT w m a
liftSh Sh a
m = m (a, w) -> WriterT w m a
forall w (m :: * -> *) a. m (a, w) -> WriterT w m a
WriterT (m (a, w) -> WriterT w m a) -> m (a, w) -> WriterT w m a
forall a b. (a -> b) -> a -> b
$ do
a
a <- Sh a -> m a
forall a. Sh a -> m a
forall (m :: * -> *) a. MonadSh m => Sh a -> m a
liftSh Sh a
m
(a, w) -> m (a, w)
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (a
a, w
forall a. Monoid a => a
mempty :: w)
instance (Monoid w, MonadSh m) => MonadSh (Strict.WriterT w m) where
liftSh :: forall a. Sh a -> WriterT w m a
liftSh Sh a
m = m (a, w) -> WriterT w m a
forall w (m :: * -> *) a. m (a, w) -> WriterT w m a
Strict.WriterT (m (a, w) -> WriterT w m a) -> m (a, w) -> WriterT w m a
forall a b. (a -> b) -> a -> b
$ do
a
a <- Sh a -> m a
forall a. Sh a -> m a
forall (m :: * -> *) a. MonadSh m => Sh a -> m a
liftSh Sh a
m
(a, w) -> m (a, w)
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (a
a, w
forall a. Monoid a => a
mempty :: w)
instance (Monoid w, MonadSh m) => MonadSh (RWS.RWST r w s m) where
liftSh :: forall a. Sh a -> RWST r w s m a
liftSh Sh a
m = (r -> s -> m (a, s, w)) -> RWST r w s m a
forall r w s (m :: * -> *) a.
(r -> s -> m (a, s, w)) -> RWST r w s m a
RWS.RWST ((r -> s -> m (a, s, w)) -> RWST r w s m a)
-> (r -> s -> m (a, s, w)) -> RWST r w s m a
forall a b. (a -> b) -> a -> b
$ \r
_ s
s -> do
a
a <- Sh a -> m a
forall a. Sh a -> m a
forall (m :: * -> *) a. MonadSh m => Sh a -> m a
liftSh Sh a
m
(a, s, w) -> m (a, s, w)
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (a
a, s
s, w
forall a. Monoid a => a
mempty :: w)
instance (Monoid w, MonadSh m) => MonadSh (Strict.RWST r w s m) where
liftSh :: forall a. Sh a -> RWST r w s m a
liftSh Sh a
m = (r -> s -> m (a, s, w)) -> RWST r w s m a
forall r w s (m :: * -> *) a.
(r -> s -> m (a, s, w)) -> RWST r w s m a
Strict.RWST ((r -> s -> m (a, s, w)) -> RWST r w s m a)
-> (r -> s -> m (a, s, w)) -> RWST r w s m a
forall a b. (a -> b) -> a -> b
$ \r
_ s
s -> do
a
a <- Sh a -> m a
forall a. Sh a -> m a
forall (m :: * -> *) a. MonadSh m => Sh a -> m a
liftSh Sh a
m
(a, s, w) -> m (a, s, w)
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (a
a, s
s, w
forall a. Monoid a => a
mempty :: w)
instance MonadSh m => S.ShellCmd (m Text) where
cmdAll :: FilePath -> [Text] -> m Text
cmdAll = (Sh Text -> m Text
forall a. Sh a -> m a
forall (m :: * -> *) a. MonadSh m => Sh a -> m a
liftSh (Sh Text -> m Text) -> ([Text] -> Sh Text) -> [Text] -> m Text
forall b c a. (b -> c) -> (a -> b) -> a -> c
.) (([Text] -> Sh Text) -> [Text] -> m Text)
-> (FilePath -> [Text] -> Sh Text) -> FilePath -> [Text] -> m Text
forall b c a. (b -> c) -> (a -> b) -> a -> c
. FilePath -> [Text] -> Sh Text
S.run
instance (MonadSh m, s ~ Text, Show s) => S.ShellCmd (m s) where
cmdAll :: FilePath -> [Text] -> m s
cmdAll = (Sh Text -> m Text
forall a. Sh a -> m a
forall (m :: * -> *) a. MonadSh m => Sh a -> m a
liftSh (Sh Text -> m Text) -> ([Text] -> Sh Text) -> [Text] -> m Text
forall b c a. (b -> c) -> (a -> b) -> a -> c
.) (([Text] -> Sh Text) -> [Text] -> m Text)
-> (FilePath -> [Text] -> Sh Text) -> FilePath -> [Text] -> m Text
forall b c a. (b -> c) -> (a -> b) -> a -> c
. FilePath -> [Text] -> Sh Text
S.run
instance MonadSh m => S.ShellCmd (m ()) where
cmdAll :: FilePath -> [Text] -> m ()
cmdAll = (Sh () -> m ()
forall a. Sh a -> m a
forall (m :: * -> *) a. MonadSh m => Sh a -> m a
liftSh (Sh () -> m ()) -> ([Text] -> Sh ()) -> [Text] -> m ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
.) (([Text] -> Sh ()) -> [Text] -> m ())
-> (FilePath -> [Text] -> Sh ()) -> FilePath -> [Text] -> m ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. FilePath -> [Text] -> Sh ()
S.run_
class Monad m => MonadShControl m where
data ShM m a
liftShWith :: ((forall x. m x -> Sh (ShM m x)) -> Sh a) -> m a
restoreSh :: ShM m a -> m a
instance MonadShControl Sh where
newtype ShM Sh a = ShSh a
liftShWith :: forall a. ((forall x. Sh x -> Sh (ShM Sh x)) -> Sh a) -> Sh a
liftShWith (forall x. Sh x -> Sh (ShM Sh x)) -> Sh a
f = (forall x. Sh x -> Sh (ShM Sh x)) -> Sh a
f ((forall x. Sh x -> Sh (ShM Sh x)) -> Sh a)
-> (forall x. Sh x -> Sh (ShM Sh x)) -> Sh a
forall a b. (a -> b) -> a -> b
$ (x -> ShM Sh x) -> Sh x -> Sh (ShM Sh x)
forall (m :: * -> *) a1 r. Monad m => (a1 -> r) -> m a1 -> m r
liftM x -> ShM Sh x
forall a. a -> ShM Sh a
ShSh
restoreSh :: forall a. ShM Sh a -> Sh a
restoreSh (ShSh a
x) = a -> Sh a
forall a. a -> Sh a
forall (m :: * -> *) a. Monad m => a -> m a
return a
x
{-# INLINE liftShWith #-}
{-# INLINE restoreSh #-}
instance MonadShControl m => MonadShControl (MaybeT m) where
newtype ShM (MaybeT m) a = MaybeTShM (ShM m (Maybe a))
liftShWith :: forall a.
((forall x. MaybeT m x -> Sh (ShM (MaybeT m) x)) -> Sh a)
-> MaybeT m a
liftShWith (forall x. MaybeT m x -> Sh (ShM (MaybeT m) x)) -> Sh a
f =
m (Maybe a) -> MaybeT m a
forall (m :: * -> *) a. m (Maybe a) -> MaybeT m a
MaybeT (m (Maybe a) -> MaybeT m a) -> m (Maybe a) -> MaybeT m a
forall a b. (a -> b) -> a -> b
$ (a -> Maybe a) -> m a -> m (Maybe a)
forall (m :: * -> *) a1 r. Monad m => (a1 -> r) -> m a1 -> m r
liftM a -> Maybe a
forall a. a -> Maybe a
forall (m :: * -> *) a. Monad m => a -> m a
return (m a -> m (Maybe a)) -> m a -> m (Maybe a)
forall a b. (a -> b) -> a -> b
$ ((forall x. m x -> Sh (ShM m x)) -> Sh a) -> m a
forall a. ((forall x. m x -> Sh (ShM m x)) -> Sh a) -> m a
forall (m :: * -> *) a.
MonadShControl m =>
((forall x. m x -> Sh (ShM m x)) -> Sh a) -> m a
liftShWith (((forall x. m x -> Sh (ShM m x)) -> Sh a) -> m a)
-> ((forall x. m x -> Sh (ShM m x)) -> Sh a) -> m a
forall a b. (a -> b) -> a -> b
$ \forall x. m x -> Sh (ShM m x)
runInSh -> (forall x. MaybeT m x -> Sh (ShM (MaybeT m) x)) -> Sh a
f ((forall x. MaybeT m x -> Sh (ShM (MaybeT m) x)) -> Sh a)
-> (forall x. MaybeT m x -> Sh (ShM (MaybeT m) x)) -> Sh a
forall a b. (a -> b) -> a -> b
$ \MaybeT m x
k ->
(ShM m (Maybe x) -> ShM (MaybeT m) x)
-> Sh (ShM m (Maybe x)) -> Sh (ShM (MaybeT m) x)
forall (m :: * -> *) a1 r. Monad m => (a1 -> r) -> m a1 -> m r
liftM ShM m (Maybe x) -> ShM (MaybeT m) x
forall (m :: * -> *) a. ShM m (Maybe a) -> ShM (MaybeT m) a
MaybeTShM (Sh (ShM m (Maybe x)) -> Sh (ShM (MaybeT m) x))
-> Sh (ShM m (Maybe x)) -> Sh (ShM (MaybeT m) x)
forall a b. (a -> b) -> a -> b
$ m (Maybe x) -> Sh (ShM m (Maybe x))
forall x. m x -> Sh (ShM m x)
runInSh (m (Maybe x) -> Sh (ShM m (Maybe x)))
-> m (Maybe x) -> Sh (ShM m (Maybe x))
forall a b. (a -> b) -> a -> b
$ MaybeT m x -> m (Maybe x)
forall (m :: * -> *) a. MaybeT m a -> m (Maybe a)
runMaybeT MaybeT m x
k
restoreSh :: forall a. ShM (MaybeT m) a -> MaybeT m a
restoreSh (MaybeTShM ShM m (Maybe a)
m) = m (Maybe a) -> MaybeT m a
forall (m :: * -> *) a. m (Maybe a) -> MaybeT m a
MaybeT (m (Maybe a) -> MaybeT m a)
-> (ShM m (Maybe a) -> m (Maybe a))
-> ShM m (Maybe a)
-> MaybeT m a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ShM m (Maybe a) -> m (Maybe a)
forall a. ShM m a -> m a
forall (m :: * -> *) a. MonadShControl m => ShM m a -> m a
restoreSh (ShM m (Maybe a) -> MaybeT m a) -> ShM m (Maybe a) -> MaybeT m a
forall a b. (a -> b) -> a -> b
$ ShM m (Maybe a)
m
{-# INLINE liftShWith #-}
{-# INLINE restoreSh #-}
instance MonadShControl m
=> MonadShControl (IdentityT m) where
newtype ShM (IdentityT m) a = IdentityTShM (ShM m a)
liftShWith :: forall a.
((forall x. IdentityT m x -> Sh (ShM (IdentityT m) x)) -> Sh a)
-> IdentityT m a
liftShWith (forall x. IdentityT m x -> Sh (ShM (IdentityT m) x)) -> Sh a
f =
m a -> IdentityT m a
forall {k} (f :: k -> *) (a :: k). f a -> IdentityT f a
IdentityT (m a -> IdentityT m a) -> m a -> IdentityT m a
forall a b. (a -> b) -> a -> b
$ (a -> a) -> m a -> m a
forall (m :: * -> *) a1 r. Monad m => (a1 -> r) -> m a1 -> m r
liftM a -> a
forall a. a -> a
id (m a -> m a) -> m a -> m a
forall a b. (a -> b) -> a -> b
$ ((forall x. m x -> Sh (ShM m x)) -> Sh a) -> m a
forall a. ((forall x. m x -> Sh (ShM m x)) -> Sh a) -> m a
forall (m :: * -> *) a.
MonadShControl m =>
((forall x. m x -> Sh (ShM m x)) -> Sh a) -> m a
liftShWith (((forall x. m x -> Sh (ShM m x)) -> Sh a) -> m a)
-> ((forall x. m x -> Sh (ShM m x)) -> Sh a) -> m a
forall a b. (a -> b) -> a -> b
$ \forall x. m x -> Sh (ShM m x)
runInSh -> (forall x. IdentityT m x -> Sh (ShM (IdentityT m) x)) -> Sh a
f ((forall x. IdentityT m x -> Sh (ShM (IdentityT m) x)) -> Sh a)
-> (forall x. IdentityT m x -> Sh (ShM (IdentityT m) x)) -> Sh a
forall a b. (a -> b) -> a -> b
$ \IdentityT m x
k ->
(ShM m x -> ShM (IdentityT m) x)
-> Sh (ShM m x) -> Sh (ShM (IdentityT m) x)
forall (m :: * -> *) a1 r. Monad m => (a1 -> r) -> m a1 -> m r
liftM ShM m x -> ShM (IdentityT m) x
forall (m :: * -> *) a. ShM m a -> ShM (IdentityT m) a
IdentityTShM (Sh (ShM m x) -> Sh (ShM (IdentityT m) x))
-> Sh (ShM m x) -> Sh (ShM (IdentityT m) x)
forall a b. (a -> b) -> a -> b
$ m x -> Sh (ShM m x)
forall x. m x -> Sh (ShM m x)
runInSh (m x -> Sh (ShM m x)) -> m x -> Sh (ShM m x)
forall a b. (a -> b) -> a -> b
$ IdentityT m x -> m x
forall {k} (f :: k -> *) (a :: k). IdentityT f a -> f a
runIdentityT IdentityT m x
k
restoreSh :: forall a. ShM (IdentityT m) a -> IdentityT m a
restoreSh (IdentityTShM ShM m a
m) = m a -> IdentityT m a
forall {k} (f :: k -> *) (a :: k). f a -> IdentityT f a
IdentityT (m a -> IdentityT m a)
-> (ShM m a -> m a) -> ShM m a -> IdentityT m a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ShM m a -> m a
forall a. ShM m a -> m a
forall (m :: * -> *) a. MonadShControl m => ShM m a -> m a
restoreSh (ShM m a -> IdentityT m a) -> ShM m a -> IdentityT m a
forall a b. (a -> b) -> a -> b
$ ShM m a
m
{-# INLINE liftShWith #-}
{-# INLINE restoreSh #-}
instance (MonadShControl m, Monoid w)
=> MonadShControl (WriterT w m) where
newtype ShM (WriterT w m) a = WriterTShM (ShM m (a, w))
liftShWith :: forall a.
((forall x. WriterT w m x -> Sh (ShM (WriterT w m) x)) -> Sh a)
-> WriterT w m a
liftShWith (forall x. WriterT w m x -> Sh (ShM (WriterT w m) x)) -> Sh a
f =
m (a, w) -> WriterT w m a
forall w (m :: * -> *) a. m (a, w) -> WriterT w m a
WriterT (m (a, w) -> WriterT w m a) -> m (a, w) -> WriterT w m a
forall a b. (a -> b) -> a -> b
$ (a -> (a, w)) -> m a -> m (a, w)
forall (m :: * -> *) a1 r. Monad m => (a1 -> r) -> m a1 -> m r
liftM (\a
x -> (a
x, w
forall a. Monoid a => a
mempty :: w)) (m a -> m (a, w)) -> m a -> m (a, w)
forall a b. (a -> b) -> a -> b
$ ((forall x. m x -> Sh (ShM m x)) -> Sh a) -> m a
forall a. ((forall x. m x -> Sh (ShM m x)) -> Sh a) -> m a
forall (m :: * -> *) a.
MonadShControl m =>
((forall x. m x -> Sh (ShM m x)) -> Sh a) -> m a
liftShWith (((forall x. m x -> Sh (ShM m x)) -> Sh a) -> m a)
-> ((forall x. m x -> Sh (ShM m x)) -> Sh a) -> m a
forall a b. (a -> b) -> a -> b
$ \forall x. m x -> Sh (ShM m x)
runInSh -> (forall x. WriterT w m x -> Sh (ShM (WriterT w m) x)) -> Sh a
f ((forall x. WriterT w m x -> Sh (ShM (WriterT w m) x)) -> Sh a)
-> (forall x. WriterT w m x -> Sh (ShM (WriterT w m) x)) -> Sh a
forall a b. (a -> b) -> a -> b
$ \WriterT w m x
k ->
(ShM m (x, w) -> ShM (WriterT w m) x)
-> Sh (ShM m (x, w)) -> Sh (ShM (WriterT w m) x)
forall (m :: * -> *) a1 r. Monad m => (a1 -> r) -> m a1 -> m r
liftM ShM m (x, w) -> ShM (WriterT w m) x
forall w (m :: * -> *) a. ShM m (a, w) -> ShM (WriterT w m) a
WriterTShM (Sh (ShM m (x, w)) -> Sh (ShM (WriterT w m) x))
-> Sh (ShM m (x, w)) -> Sh (ShM (WriterT w m) x)
forall a b. (a -> b) -> a -> b
$ m (x, w) -> Sh (ShM m (x, w))
forall x. m x -> Sh (ShM m x)
runInSh (m (x, w) -> Sh (ShM m (x, w))) -> m (x, w) -> Sh (ShM m (x, w))
forall a b. (a -> b) -> a -> b
$ WriterT w m x -> m (x, w)
forall w (m :: * -> *) a. WriterT w m a -> m (a, w)
runWriterT WriterT w m x
k
restoreSh :: forall a. ShM (WriterT w m) a -> WriterT w m a
restoreSh (WriterTShM ShM m (a, w)
m) = m (a, w) -> WriterT w m a
forall w (m :: * -> *) a. m (a, w) -> WriterT w m a
WriterT (m (a, w) -> WriterT w m a)
-> (ShM m (a, w) -> m (a, w)) -> ShM m (a, w) -> WriterT w m a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ShM m (a, w) -> m (a, w)
forall a. ShM m a -> m a
forall (m :: * -> *) a. MonadShControl m => ShM m a -> m a
restoreSh (ShM m (a, w) -> WriterT w m a) -> ShM m (a, w) -> WriterT w m a
forall a b. (a -> b) -> a -> b
$ ShM m (a, w)
m
{-# INLINE liftShWith #-}
{-# INLINE restoreSh #-}
instance (MonadShControl m, Monoid w)
=> MonadShControl (Strict.WriterT w m) where
newtype ShM (Strict.WriterT w m) a = StWriterTShM (ShM m (a, w))
liftShWith :: forall a.
((forall x. WriterT w m x -> Sh (ShM (WriterT w m) x)) -> Sh a)
-> WriterT w m a
liftShWith (forall x. WriterT w m x -> Sh (ShM (WriterT w m) x)) -> Sh a
f =
m (a, w) -> WriterT w m a
forall w (m :: * -> *) a. m (a, w) -> WriterT w m a
Strict.WriterT (m (a, w) -> WriterT w m a) -> m (a, w) -> WriterT w m a
forall a b. (a -> b) -> a -> b
$ (a -> (a, w)) -> m a -> m (a, w)
forall (m :: * -> *) a1 r. Monad m => (a1 -> r) -> m a1 -> m r
liftM (\a
x -> (a
x, w
forall a. Monoid a => a
mempty :: w)) (m a -> m (a, w)) -> m a -> m (a, w)
forall a b. (a -> b) -> a -> b
$ ((forall x. m x -> Sh (ShM m x)) -> Sh a) -> m a
forall a. ((forall x. m x -> Sh (ShM m x)) -> Sh a) -> m a
forall (m :: * -> *) a.
MonadShControl m =>
((forall x. m x -> Sh (ShM m x)) -> Sh a) -> m a
liftShWith (((forall x. m x -> Sh (ShM m x)) -> Sh a) -> m a)
-> ((forall x. m x -> Sh (ShM m x)) -> Sh a) -> m a
forall a b. (a -> b) -> a -> b
$ \forall x. m x -> Sh (ShM m x)
runInSh -> (forall x. WriterT w m x -> Sh (ShM (WriterT w m) x)) -> Sh a
f ((forall x. WriterT w m x -> Sh (ShM (WriterT w m) x)) -> Sh a)
-> (forall x. WriterT w m x -> Sh (ShM (WriterT w m) x)) -> Sh a
forall a b. (a -> b) -> a -> b
$ \WriterT w m x
k ->
(ShM m (x, w) -> ShM (WriterT w m) x)
-> Sh (ShM m (x, w)) -> Sh (ShM (WriterT w m) x)
forall (m :: * -> *) a1 r. Monad m => (a1 -> r) -> m a1 -> m r
liftM ShM m (x, w) -> ShM (WriterT w m) x
forall w (m :: * -> *) a. ShM m (a, w) -> ShM (WriterT w m) a
StWriterTShM (Sh (ShM m (x, w)) -> Sh (ShM (WriterT w m) x))
-> Sh (ShM m (x, w)) -> Sh (ShM (WriterT w m) x)
forall a b. (a -> b) -> a -> b
$ m (x, w) -> Sh (ShM m (x, w))
forall x. m x -> Sh (ShM m x)
runInSh (m (x, w) -> Sh (ShM m (x, w))) -> m (x, w) -> Sh (ShM m (x, w))
forall a b. (a -> b) -> a -> b
$ WriterT w m x -> m (x, w)
forall w (m :: * -> *) a. WriterT w m a -> m (a, w)
Strict.runWriterT WriterT w m x
k
restoreSh :: forall a. ShM (WriterT w m) a -> WriterT w m a
restoreSh (StWriterTShM ShM m (a, w)
m) = m (a, w) -> WriterT w m a
forall w (m :: * -> *) a. m (a, w) -> WriterT w m a
Strict.WriterT (m (a, w) -> WriterT w m a)
-> (ShM m (a, w) -> m (a, w)) -> ShM m (a, w) -> WriterT w m a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ShM m (a, w) -> m (a, w)
forall a. ShM m a -> m a
forall (m :: * -> *) a. MonadShControl m => ShM m a -> m a
restoreSh (ShM m (a, w) -> WriterT w m a) -> ShM m (a, w) -> WriterT w m a
forall a b. (a -> b) -> a -> b
$ ShM m (a, w)
m
{-# INLINE liftShWith #-}
{-# INLINE restoreSh #-}
instance MonadShControl m => MonadShControl (ExceptT e m) where
newtype ShM (ExceptT e m) a = ExceptTShM (ShM m (Either e a))
liftShWith :: forall a.
((forall x. ExceptT e m x -> Sh (ShM (ExceptT e m) x)) -> Sh a)
-> ExceptT e m a
liftShWith (forall x. ExceptT e m x -> Sh (ShM (ExceptT e m) x)) -> Sh a
f =
m (Either e a) -> ExceptT e m a
forall e (m :: * -> *) a. m (Either e a) -> ExceptT e m a
ExceptT (m (Either e a) -> ExceptT e m a)
-> m (Either e a) -> ExceptT e m a
forall a b. (a -> b) -> a -> b
$ (a -> Either e a) -> m a -> m (Either e a)
forall (m :: * -> *) a1 r. Monad m => (a1 -> r) -> m a1 -> m r
liftM a -> Either e a
forall a. a -> Either e a
forall (m :: * -> *) a. Monad m => a -> m a
return (m a -> m (Either e a)) -> m a -> m (Either e a)
forall a b. (a -> b) -> a -> b
$ ((forall x. m x -> Sh (ShM m x)) -> Sh a) -> m a
forall a. ((forall x. m x -> Sh (ShM m x)) -> Sh a) -> m a
forall (m :: * -> *) a.
MonadShControl m =>
((forall x. m x -> Sh (ShM m x)) -> Sh a) -> m a
liftShWith (((forall x. m x -> Sh (ShM m x)) -> Sh a) -> m a)
-> ((forall x. m x -> Sh (ShM m x)) -> Sh a) -> m a
forall a b. (a -> b) -> a -> b
$ \forall x. m x -> Sh (ShM m x)
runInSh -> (forall x. ExceptT e m x -> Sh (ShM (ExceptT e m) x)) -> Sh a
f ((forall x. ExceptT e m x -> Sh (ShM (ExceptT e m) x)) -> Sh a)
-> (forall x. ExceptT e m x -> Sh (ShM (ExceptT e m) x)) -> Sh a
forall a b. (a -> b) -> a -> b
$ \ExceptT e m x
k ->
(ShM m (Either e x) -> ShM (ExceptT e m) x)
-> Sh (ShM m (Either e x)) -> Sh (ShM (ExceptT e m) x)
forall (m :: * -> *) a1 r. Monad m => (a1 -> r) -> m a1 -> m r
liftM ShM m (Either e x) -> ShM (ExceptT e m) x
forall e (m :: * -> *) a. ShM m (Either e a) -> ShM (ExceptT e m) a
ExceptTShM (Sh (ShM m (Either e x)) -> Sh (ShM (ExceptT e m) x))
-> Sh (ShM m (Either e x)) -> Sh (ShM (ExceptT e m) x)
forall a b. (a -> b) -> a -> b
$ m (Either e x) -> Sh (ShM m (Either e x))
forall x. m x -> Sh (ShM m x)
runInSh (m (Either e x) -> Sh (ShM m (Either e x)))
-> m (Either e x) -> Sh (ShM m (Either e x))
forall a b. (a -> b) -> a -> b
$ ExceptT e m x -> m (Either e x)
forall e (m :: * -> *) a. ExceptT e m a -> m (Either e a)
runExceptT ExceptT e m x
k
restoreSh :: forall a. ShM (ExceptT e m) a -> ExceptT e m a
restoreSh (ExceptTShM ShM m (Either e a)
m) = m (Either e a) -> ExceptT e m a
forall e (m :: * -> *) a. m (Either e a) -> ExceptT e m a
ExceptT (m (Either e a) -> ExceptT e m a)
-> (ShM m (Either e a) -> m (Either e a))
-> ShM m (Either e a)
-> ExceptT e m a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ShM m (Either e a) -> m (Either e a)
forall a. ShM m a -> m a
forall (m :: * -> *) a. MonadShControl m => ShM m a -> m a
restoreSh (ShM m (Either e a) -> ExceptT e m a)
-> ShM m (Either e a) -> ExceptT e m a
forall a b. (a -> b) -> a -> b
$ ShM m (Either e a)
m
{-# INLINE liftShWith #-}
{-# INLINE restoreSh #-}
instance MonadShControl m => MonadShControl (StateT s m) where
newtype ShM (StateT s m) a = StateTShM (ShM m (a, s))
liftShWith :: forall a.
((forall x. StateT s m x -> Sh (ShM (StateT s m) x)) -> Sh a)
-> StateT s m a
liftShWith (forall x. StateT s m x -> Sh (ShM (StateT s m) x)) -> Sh a
f = (s -> m (a, s)) -> StateT s m a
forall s (m :: * -> *) a. (s -> m (a, s)) -> StateT s m a
StateT ((s -> m (a, s)) -> StateT s m a)
-> (s -> m (a, s)) -> StateT s m a
forall a b. (a -> b) -> a -> b
$ \s
s ->
(a -> (a, s)) -> m a -> m (a, s)
forall (m :: * -> *) a1 r. Monad m => (a1 -> r) -> m a1 -> m r
liftM (\a
x -> (a
x,s
s)) (m a -> m (a, s)) -> m a -> m (a, s)
forall a b. (a -> b) -> a -> b
$ ((forall x. m x -> Sh (ShM m x)) -> Sh a) -> m a
forall a. ((forall x. m x -> Sh (ShM m x)) -> Sh a) -> m a
forall (m :: * -> *) a.
MonadShControl m =>
((forall x. m x -> Sh (ShM m x)) -> Sh a) -> m a
liftShWith (((forall x. m x -> Sh (ShM m x)) -> Sh a) -> m a)
-> ((forall x. m x -> Sh (ShM m x)) -> Sh a) -> m a
forall a b. (a -> b) -> a -> b
$ \forall x. m x -> Sh (ShM m x)
runInSh -> (forall x. StateT s m x -> Sh (ShM (StateT s m) x)) -> Sh a
f ((forall x. StateT s m x -> Sh (ShM (StateT s m) x)) -> Sh a)
-> (forall x. StateT s m x -> Sh (ShM (StateT s m) x)) -> Sh a
forall a b. (a -> b) -> a -> b
$ \StateT s m x
k ->
(ShM m (x, s) -> ShM (StateT s m) x)
-> Sh (ShM m (x, s)) -> Sh (ShM (StateT s m) x)
forall (m :: * -> *) a1 r. Monad m => (a1 -> r) -> m a1 -> m r
liftM ShM m (x, s) -> ShM (StateT s m) x
forall s (m :: * -> *) a. ShM m (a, s) -> ShM (StateT s m) a
StateTShM (Sh (ShM m (x, s)) -> Sh (ShM (StateT s m) x))
-> Sh (ShM m (x, s)) -> Sh (ShM (StateT s m) x)
forall a b. (a -> b) -> a -> b
$ m (x, s) -> Sh (ShM m (x, s))
forall x. m x -> Sh (ShM m x)
runInSh (m (x, s) -> Sh (ShM m (x, s))) -> m (x, s) -> Sh (ShM m (x, s))
forall a b. (a -> b) -> a -> b
$ StateT s m x -> s -> m (x, s)
forall s (m :: * -> *) a. StateT s m a -> s -> m (a, s)
runStateT StateT s m x
k s
s
restoreSh :: forall a. ShM (StateT s m) a -> StateT s m a
restoreSh (StateTShM ShM m (a, s)
m) = (s -> m (a, s)) -> StateT s m a
forall s (m :: * -> *) a. (s -> m (a, s)) -> StateT s m a
StateT ((s -> m (a, s)) -> StateT s m a)
-> (ShM m (a, s) -> s -> m (a, s)) -> ShM m (a, s) -> StateT s m a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. m (a, s) -> s -> m (a, s)
forall a b. a -> b -> a
const (m (a, s) -> s -> m (a, s))
-> (ShM m (a, s) -> m (a, s)) -> ShM m (a, s) -> s -> m (a, s)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ShM m (a, s) -> m (a, s)
forall a. ShM m a -> m a
forall (m :: * -> *) a. MonadShControl m => ShM m a -> m a
restoreSh (ShM m (a, s) -> StateT s m a) -> ShM m (a, s) -> StateT s m a
forall a b. (a -> b) -> a -> b
$ ShM m (a, s)
m
{-# INLINE liftShWith #-}
{-# INLINE restoreSh #-}
instance MonadShControl m => MonadShControl (Strict.StateT s m) where
newtype ShM (Strict.StateT s m) a = StStateTShM (ShM m (a, s))
liftShWith :: forall a.
((forall x. StateT s m x -> Sh (ShM (StateT s m) x)) -> Sh a)
-> StateT s m a
liftShWith (forall x. StateT s m x -> Sh (ShM (StateT s m) x)) -> Sh a
f = (s -> m (a, s)) -> StateT s m a
forall s (m :: * -> *) a. (s -> m (a, s)) -> StateT s m a
Strict.StateT ((s -> m (a, s)) -> StateT s m a)
-> (s -> m (a, s)) -> StateT s m a
forall a b. (a -> b) -> a -> b
$ \s
s ->
(a -> (a, s)) -> m a -> m (a, s)
forall (m :: * -> *) a1 r. Monad m => (a1 -> r) -> m a1 -> m r
liftM (\a
x -> (a
x,s
s)) (m a -> m (a, s)) -> m a -> m (a, s)
forall a b. (a -> b) -> a -> b
$ ((forall x. m x -> Sh (ShM m x)) -> Sh a) -> m a
forall a. ((forall x. m x -> Sh (ShM m x)) -> Sh a) -> m a
forall (m :: * -> *) a.
MonadShControl m =>
((forall x. m x -> Sh (ShM m x)) -> Sh a) -> m a
liftShWith (((forall x. m x -> Sh (ShM m x)) -> Sh a) -> m a)
-> ((forall x. m x -> Sh (ShM m x)) -> Sh a) -> m a
forall a b. (a -> b) -> a -> b
$ \forall x. m x -> Sh (ShM m x)
runInSh -> (forall x. StateT s m x -> Sh (ShM (StateT s m) x)) -> Sh a
f ((forall x. StateT s m x -> Sh (ShM (StateT s m) x)) -> Sh a)
-> (forall x. StateT s m x -> Sh (ShM (StateT s m) x)) -> Sh a
forall a b. (a -> b) -> a -> b
$ \StateT s m x
k ->
(ShM m (x, s) -> ShM (StateT s m) x)
-> Sh (ShM m (x, s)) -> Sh (ShM (StateT s m) x)
forall (m :: * -> *) a1 r. Monad m => (a1 -> r) -> m a1 -> m r
liftM ShM m (x, s) -> ShM (StateT s m) x
forall s (m :: * -> *) a. ShM m (a, s) -> ShM (StateT s m) a
StStateTShM (Sh (ShM m (x, s)) -> Sh (ShM (StateT s m) x))
-> Sh (ShM m (x, s)) -> Sh (ShM (StateT s m) x)
forall a b. (a -> b) -> a -> b
$ m (x, s) -> Sh (ShM m (x, s))
forall x. m x -> Sh (ShM m x)
runInSh (m (x, s) -> Sh (ShM m (x, s))) -> m (x, s) -> Sh (ShM m (x, s))
forall a b. (a -> b) -> a -> b
$ StateT s m x -> s -> m (x, s)
forall s (m :: * -> *) a. StateT s m a -> s -> m (a, s)
Strict.runStateT StateT s m x
k s
s
restoreSh :: forall a. ShM (StateT s m) a -> StateT s m a
restoreSh (StStateTShM ShM m (a, s)
m) = (s -> m (a, s)) -> StateT s m a
forall s (m :: * -> *) a. (s -> m (a, s)) -> StateT s m a
Strict.StateT ((s -> m (a, s)) -> StateT s m a)
-> (ShM m (a, s) -> s -> m (a, s)) -> ShM m (a, s) -> StateT s m a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. m (a, s) -> s -> m (a, s)
forall a b. a -> b -> a
const (m (a, s) -> s -> m (a, s))
-> (ShM m (a, s) -> m (a, s)) -> ShM m (a, s) -> s -> m (a, s)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ShM m (a, s) -> m (a, s)
forall a. ShM m a -> m a
forall (m :: * -> *) a. MonadShControl m => ShM m a -> m a
restoreSh (ShM m (a, s) -> StateT s m a) -> ShM m (a, s) -> StateT s m a
forall a b. (a -> b) -> a -> b
$ ShM m (a, s)
m
{-# INLINE liftShWith #-}
{-# INLINE restoreSh #-}
instance MonadShControl m => MonadShControl (ReaderT r m) where
newtype ShM (ReaderT r m) a = ReaderTShM (ShM m a)
liftShWith :: forall a.
((forall x. ReaderT r m x -> Sh (ShM (ReaderT r m) x)) -> Sh a)
-> ReaderT r m a
liftShWith (forall x. ReaderT r m x -> Sh (ShM (ReaderT r m) x)) -> Sh a
f = (r -> m a) -> ReaderT r m a
forall r (m :: * -> *) a. (r -> m a) -> ReaderT r m a
ReaderT ((r -> m a) -> ReaderT r m a) -> (r -> m a) -> ReaderT r m a
forall a b. (a -> b) -> a -> b
$ \r
r ->
(a -> a) -> m a -> m a
forall (m :: * -> *) a1 r. Monad m => (a1 -> r) -> m a1 -> m r
liftM a -> a
forall a. a -> a
id (m a -> m a) -> m a -> m a
forall a b. (a -> b) -> a -> b
$ ((forall x. m x -> Sh (ShM m x)) -> Sh a) -> m a
forall a. ((forall x. m x -> Sh (ShM m x)) -> Sh a) -> m a
forall (m :: * -> *) a.
MonadShControl m =>
((forall x. m x -> Sh (ShM m x)) -> Sh a) -> m a
liftShWith (((forall x. m x -> Sh (ShM m x)) -> Sh a) -> m a)
-> ((forall x. m x -> Sh (ShM m x)) -> Sh a) -> m a
forall a b. (a -> b) -> a -> b
$ \forall x. m x -> Sh (ShM m x)
runInSh -> (forall x. ReaderT r m x -> Sh (ShM (ReaderT r m) x)) -> Sh a
f ((forall x. ReaderT r m x -> Sh (ShM (ReaderT r m) x)) -> Sh a)
-> (forall x. ReaderT r m x -> Sh (ShM (ReaderT r m) x)) -> Sh a
forall a b. (a -> b) -> a -> b
$ \ReaderT r m x
k ->
(ShM m x -> ShM (ReaderT r m) x)
-> Sh (ShM m x) -> Sh (ShM (ReaderT r m) x)
forall (m :: * -> *) a1 r. Monad m => (a1 -> r) -> m a1 -> m r
liftM ShM m x -> ShM (ReaderT r m) x
forall r (m :: * -> *) a. ShM m a -> ShM (ReaderT r m) a
ReaderTShM (Sh (ShM m x) -> Sh (ShM (ReaderT r m) x))
-> Sh (ShM m x) -> Sh (ShM (ReaderT r m) x)
forall a b. (a -> b) -> a -> b
$ m x -> Sh (ShM m x)
forall x. m x -> Sh (ShM m x)
runInSh (m x -> Sh (ShM m x)) -> m x -> Sh (ShM m x)
forall a b. (a -> b) -> a -> b
$ ReaderT r m x -> r -> m x
forall r (m :: * -> *) a. ReaderT r m a -> r -> m a
runReaderT ReaderT r m x
k r
r
restoreSh :: forall a. ShM (ReaderT r m) a -> ReaderT r m a
restoreSh (ReaderTShM ShM m a
m) = (r -> m a) -> ReaderT r m a
forall r (m :: * -> *) a. (r -> m a) -> ReaderT r m a
ReaderT ((r -> m a) -> ReaderT r m a)
-> (ShM m a -> r -> m a) -> ShM m a -> ReaderT r m a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. m a -> r -> m a
forall a b. a -> b -> a
const (m a -> r -> m a) -> (ShM m a -> m a) -> ShM m a -> r -> m a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ShM m a -> m a
forall a. ShM m a -> m a
forall (m :: * -> *) a. MonadShControl m => ShM m a -> m a
restoreSh (ShM m a -> ReaderT r m a) -> ShM m a -> ReaderT r m a
forall a b. (a -> b) -> a -> b
$ ShM m a
m
{-# INLINE liftShWith #-}
{-# INLINE restoreSh #-}
instance (MonadShControl m, Monoid w)
=> MonadShControl (RWS.RWST r w s m) where
newtype ShM (RWS.RWST r w s m) a = RWSTShM (ShM m (a, s ,w))
liftShWith :: forall a.
((forall x. RWST r w s m x -> Sh (ShM (RWST r w s m) x)) -> Sh a)
-> RWST r w s m a
liftShWith (forall x. RWST r w s m x -> Sh (ShM (RWST r w s m) x)) -> Sh a
f = (r -> s -> m (a, s, w)) -> RWST r w s m a
forall r w s (m :: * -> *) a.
(r -> s -> m (a, s, w)) -> RWST r w s m a
RWS.RWST ((r -> s -> m (a, s, w)) -> RWST r w s m a)
-> (r -> s -> m (a, s, w)) -> RWST r w s m a
forall a b. (a -> b) -> a -> b
$ \r
r s
s ->
(a -> (a, s, w)) -> m a -> m (a, s, w)
forall (m :: * -> *) a1 r. Monad m => (a1 -> r) -> m a1 -> m r
liftM (\a
x -> (a
x,s
s,w
forall a. Monoid a => a
mempty :: w)) (m a -> m (a, s, w)) -> m a -> m (a, s, w)
forall a b. (a -> b) -> a -> b
$ ((forall x. m x -> Sh (ShM m x)) -> Sh a) -> m a
forall a. ((forall x. m x -> Sh (ShM m x)) -> Sh a) -> m a
forall (m :: * -> *) a.
MonadShControl m =>
((forall x. m x -> Sh (ShM m x)) -> Sh a) -> m a
liftShWith (((forall x. m x -> Sh (ShM m x)) -> Sh a) -> m a)
-> ((forall x. m x -> Sh (ShM m x)) -> Sh a) -> m a
forall a b. (a -> b) -> a -> b
$ \forall x. m x -> Sh (ShM m x)
runInSh -> (forall x. RWST r w s m x -> Sh (ShM (RWST r w s m) x)) -> Sh a
f ((forall x. RWST r w s m x -> Sh (ShM (RWST r w s m) x)) -> Sh a)
-> (forall x. RWST r w s m x -> Sh (ShM (RWST r w s m) x)) -> Sh a
forall a b. (a -> b) -> a -> b
$ \RWST r w s m x
k ->
(ShM m (x, s, w) -> ShM (RWST r w s m) x)
-> Sh (ShM m (x, s, w)) -> Sh (ShM (RWST r w s m) x)
forall (m :: * -> *) a1 r. Monad m => (a1 -> r) -> m a1 -> m r
liftM ShM m (x, s, w) -> ShM (RWST r w s m) x
forall r w s (m :: * -> *) a.
ShM m (a, s, w) -> ShM (RWST r w s m) a
RWSTShM (Sh (ShM m (x, s, w)) -> Sh (ShM (RWST r w s m) x))
-> Sh (ShM m (x, s, w)) -> Sh (ShM (RWST r w s m) x)
forall a b. (a -> b) -> a -> b
$ m (x, s, w) -> Sh (ShM m (x, s, w))
forall x. m x -> Sh (ShM m x)
runInSh (m (x, s, w) -> Sh (ShM m (x, s, w)))
-> m (x, s, w) -> Sh (ShM m (x, s, w))
forall a b. (a -> b) -> a -> b
$ RWST r w s m x -> r -> s -> m (x, s, w)
forall r w s (m :: * -> *) a.
RWST r w s m a -> r -> s -> m (a, s, w)
RWS.runRWST RWST r w s m x
k r
r s
s
restoreSh :: forall a. ShM (RWST r w s m) a -> RWST r w s m a
restoreSh (RWSTShM ShM m (a, s, w)
m) = (r -> s -> m (a, s, w)) -> RWST r w s m a
forall r w s (m :: * -> *) a.
(r -> s -> m (a, s, w)) -> RWST r w s m a
RWS.RWST ((r -> s -> m (a, s, w)) -> RWST r w s m a)
-> (ShM m (a, s, w) -> r -> s -> m (a, s, w))
-> ShM m (a, s, w)
-> RWST r w s m a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (s -> m (a, s, w)) -> r -> s -> m (a, s, w)
forall a b. a -> b -> a
const ((s -> m (a, s, w)) -> r -> s -> m (a, s, w))
-> (ShM m (a, s, w) -> s -> m (a, s, w))
-> ShM m (a, s, w)
-> r
-> s
-> m (a, s, w)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. m (a, s, w) -> s -> m (a, s, w)
forall a b. a -> b -> a
const (m (a, s, w) -> s -> m (a, s, w))
-> (ShM m (a, s, w) -> m (a, s, w))
-> ShM m (a, s, w)
-> s
-> m (a, s, w)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ShM m (a, s, w) -> m (a, s, w)
forall a. ShM m a -> m a
forall (m :: * -> *) a. MonadShControl m => ShM m a -> m a
restoreSh (ShM m (a, s, w) -> RWST r w s m a)
-> ShM m (a, s, w) -> RWST r w s m a
forall a b. (a -> b) -> a -> b
$ ShM m (a, s, w)
m
{-# INLINE liftShWith #-}
{-# INLINE restoreSh #-}
instance (MonadShControl m, Monoid w)
=> MonadShControl (Strict.RWST r w s m) where
newtype ShM (Strict.RWST r w s m) a = StRWSTShM (ShM m (a, s, w))
liftShWith :: forall a.
((forall x. RWST r w s m x -> Sh (ShM (RWST r w s m) x)) -> Sh a)
-> RWST r w s m a
liftShWith (forall x. RWST r w s m x -> Sh (ShM (RWST r w s m) x)) -> Sh a
f = (r -> s -> m (a, s, w)) -> RWST r w s m a
forall r w s (m :: * -> *) a.
(r -> s -> m (a, s, w)) -> RWST r w s m a
Strict.RWST ((r -> s -> m (a, s, w)) -> RWST r w s m a)
-> (r -> s -> m (a, s, w)) -> RWST r w s m a
forall a b. (a -> b) -> a -> b
$ \r
r s
s ->
(a -> (a, s, w)) -> m a -> m (a, s, w)
forall (m :: * -> *) a1 r. Monad m => (a1 -> r) -> m a1 -> m r
liftM (\a
x -> (a
x,s
s,w
forall a. Monoid a => a
mempty :: w)) (m a -> m (a, s, w)) -> m a -> m (a, s, w)
forall a b. (a -> b) -> a -> b
$ ((forall x. m x -> Sh (ShM m x)) -> Sh a) -> m a
forall a. ((forall x. m x -> Sh (ShM m x)) -> Sh a) -> m a
forall (m :: * -> *) a.
MonadShControl m =>
((forall x. m x -> Sh (ShM m x)) -> Sh a) -> m a
liftShWith (((forall x. m x -> Sh (ShM m x)) -> Sh a) -> m a)
-> ((forall x. m x -> Sh (ShM m x)) -> Sh a) -> m a
forall a b. (a -> b) -> a -> b
$ \forall x. m x -> Sh (ShM m x)
runInSh -> (forall x. RWST r w s m x -> Sh (ShM (RWST r w s m) x)) -> Sh a
f ((forall x. RWST r w s m x -> Sh (ShM (RWST r w s m) x)) -> Sh a)
-> (forall x. RWST r w s m x -> Sh (ShM (RWST r w s m) x)) -> Sh a
forall a b. (a -> b) -> a -> b
$ \RWST r w s m x
k ->
(ShM m (x, s, w) -> ShM (RWST r w s m) x)
-> Sh (ShM m (x, s, w)) -> Sh (ShM (RWST r w s m) x)
forall (m :: * -> *) a1 r. Monad m => (a1 -> r) -> m a1 -> m r
liftM ShM m (x, s, w) -> ShM (RWST r w s m) x
forall r w s (m :: * -> *) a.
ShM m (a, s, w) -> ShM (RWST r w s m) a
StRWSTShM (Sh (ShM m (x, s, w)) -> Sh (ShM (RWST r w s m) x))
-> Sh (ShM m (x, s, w)) -> Sh (ShM (RWST r w s m) x)
forall a b. (a -> b) -> a -> b
$ m (x, s, w) -> Sh (ShM m (x, s, w))
forall x. m x -> Sh (ShM m x)
runInSh (m (x, s, w) -> Sh (ShM m (x, s, w)))
-> m (x, s, w) -> Sh (ShM m (x, s, w))
forall a b. (a -> b) -> a -> b
$ RWST r w s m x -> r -> s -> m (x, s, w)
forall r w s (m :: * -> *) a.
RWST r w s m a -> r -> s -> m (a, s, w)
Strict.runRWST RWST r w s m x
k r
r s
s
restoreSh :: forall a. ShM (RWST r w s m) a -> RWST r w s m a
restoreSh (StRWSTShM ShM m (a, s, w)
m) = (r -> s -> m (a, s, w)) -> RWST r w s m a
forall r w s (m :: * -> *) a.
(r -> s -> m (a, s, w)) -> RWST r w s m a
Strict.RWST ((r -> s -> m (a, s, w)) -> RWST r w s m a)
-> (ShM m (a, s, w) -> r -> s -> m (a, s, w))
-> ShM m (a, s, w)
-> RWST r w s m a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (s -> m (a, s, w)) -> r -> s -> m (a, s, w)
forall a b. a -> b -> a
const ((s -> m (a, s, w)) -> r -> s -> m (a, s, w))
-> (ShM m (a, s, w) -> s -> m (a, s, w))
-> ShM m (a, s, w)
-> r
-> s
-> m (a, s, w)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. m (a, s, w) -> s -> m (a, s, w)
forall a b. a -> b -> a
const (m (a, s, w) -> s -> m (a, s, w))
-> (ShM m (a, s, w) -> m (a, s, w))
-> ShM m (a, s, w)
-> s
-> m (a, s, w)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ShM m (a, s, w) -> m (a, s, w)
forall a. ShM m a -> m a
forall (m :: * -> *) a. MonadShControl m => ShM m a -> m a
restoreSh (ShM m (a, s, w) -> RWST r w s m a)
-> ShM m (a, s, w) -> RWST r w s m a
forall a b. (a -> b) -> a -> b
$ ShM m (a, s, w)
m
{-# INLINE liftShWith #-}
{-# INLINE restoreSh #-}
controlSh :: MonadShControl m => ((forall x. m x -> Sh (ShM m x)) -> Sh (ShM m a)) -> m a
controlSh :: forall (m :: * -> *) a.
MonadShControl m =>
((forall x. m x -> Sh (ShM m x)) -> Sh (ShM m a)) -> m a
controlSh = ((forall {x}. m x -> Sh (ShM m x)) -> Sh (ShM m a)) -> m (ShM m a)
forall a. ((forall {x}. m x -> Sh (ShM m x)) -> Sh a) -> m a
forall (m :: * -> *) a.
MonadShControl m =>
((forall x. m x -> Sh (ShM m x)) -> Sh a) -> m a
liftShWith (((forall {x}. m x -> Sh (ShM m x)) -> Sh (ShM m a))
-> m (ShM m a))
-> (ShM m a -> m a)
-> ((forall {x}. m x -> Sh (ShM m x)) -> Sh (ShM m a))
-> m a
forall (m :: * -> *) a b c.
Monad m =>
(a -> m b) -> (b -> m c) -> a -> m c
>=> ShM m a -> m a
forall a. ShM m a -> m a
forall (m :: * -> *) a. MonadShControl m => ShM m a -> m a
restoreSh
{-# INLINE controlSh #-}
tag :: (MonadShControl m, MonadSh m) => m a -> Text -> m a
tag :: forall (m :: * -> *) a.
(MonadShControl m, MonadSh m) =>
m a -> Text -> m a
tag m a
action Text
msg = ((forall x. m x -> Sh (ShM m x)) -> Sh (ShM m a)) -> m a
forall (m :: * -> *) a.
MonadShControl m =>
((forall x. m x -> Sh (ShM m x)) -> Sh (ShM m a)) -> m a
controlSh (((forall x. m x -> Sh (ShM m x)) -> Sh (ShM m a)) -> m a)
-> ((forall x. m x -> Sh (ShM m x)) -> Sh (ShM m a)) -> m a
forall a b. (a -> b) -> a -> b
$ \forall x. m x -> Sh (ShM m x)
runInSh -> Sh (ShM m a) -> Text -> Sh (ShM m a)
forall a. Sh a -> Text -> Sh a
S.tag (m a -> Sh (ShM m a)
forall x. m x -> Sh (ShM m x)
runInSh m a
action) Text
msg
chdir :: MonadShControl m => FilePath -> m a -> m a
chdir :: forall (m :: * -> *) a. MonadShControl m => FilePath -> m a -> m a
chdir FilePath
dir m a
action = ((forall x. m x -> Sh (ShM m x)) -> Sh (ShM m a)) -> m a
forall (m :: * -> *) a.
MonadShControl m =>
((forall x. m x -> Sh (ShM m x)) -> Sh (ShM m a)) -> m a
controlSh (((forall x. m x -> Sh (ShM m x)) -> Sh (ShM m a)) -> m a)
-> ((forall x. m x -> Sh (ShM m x)) -> Sh (ShM m a)) -> m a
forall a b. (a -> b) -> a -> b
$ \forall x. m x -> Sh (ShM m x)
runInSh -> FilePath -> Sh (ShM m a) -> Sh (ShM m a)
forall a. FilePath -> Sh a -> Sh a
S.chdir FilePath
dir (m a -> Sh (ShM m a)
forall x. m x -> Sh (ShM m x)
runInSh m a
action)
chdir_p :: MonadShControl m => FilePath -> m a -> m a
chdir_p :: forall (m :: * -> *) a. MonadShControl m => FilePath -> m a -> m a
chdir_p FilePath
dir m a
action = ((forall x. m x -> Sh (ShM m x)) -> Sh (ShM m a)) -> m a
forall (m :: * -> *) a.
MonadShControl m =>
((forall x. m x -> Sh (ShM m x)) -> Sh (ShM m a)) -> m a
controlSh (((forall x. m x -> Sh (ShM m x)) -> Sh (ShM m a)) -> m a)
-> ((forall x. m x -> Sh (ShM m x)) -> Sh (ShM m a)) -> m a
forall a b. (a -> b) -> a -> b
$ \forall x. m x -> Sh (ShM m x)
runInSh -> FilePath -> Sh (ShM m a) -> Sh (ShM m a)
forall a. FilePath -> Sh a -> Sh a
S.chdir_p FilePath
dir (m a -> Sh (ShM m a)
forall x. m x -> Sh (ShM m x)
runInSh m a
action)
silently :: MonadShControl m => m a -> m a
silently :: forall (m :: * -> *) a. MonadShControl m => m a -> m a
silently m a
a = ((forall x. m x -> Sh (ShM m x)) -> Sh (ShM m a)) -> m a
forall (m :: * -> *) a.
MonadShControl m =>
((forall x. m x -> Sh (ShM m x)) -> Sh (ShM m a)) -> m a
controlSh (((forall x. m x -> Sh (ShM m x)) -> Sh (ShM m a)) -> m a)
-> ((forall x. m x -> Sh (ShM m x)) -> Sh (ShM m a)) -> m a
forall a b. (a -> b) -> a -> b
$ \forall x. m x -> Sh (ShM m x)
runInSh -> Sh (ShM m a) -> Sh (ShM m a)
forall a. Sh a -> Sh a
S.silently (m a -> Sh (ShM m a)
forall x. m x -> Sh (ShM m x)
runInSh m a
a)
verbosely :: MonadShControl m => m a -> m a
verbosely :: forall (m :: * -> *) a. MonadShControl m => m a -> m a
verbosely m a
a = ((forall x. m x -> Sh (ShM m x)) -> Sh (ShM m a)) -> m a
forall (m :: * -> *) a.
MonadShControl m =>
((forall x. m x -> Sh (ShM m x)) -> Sh (ShM m a)) -> m a
controlSh (((forall x. m x -> Sh (ShM m x)) -> Sh (ShM m a)) -> m a)
-> ((forall x. m x -> Sh (ShM m x)) -> Sh (ShM m a)) -> m a
forall a b. (a -> b) -> a -> b
$ \forall x. m x -> Sh (ShM m x)
runInSh -> Sh (ShM m a) -> Sh (ShM m a)
forall a. Sh a -> Sh a
S.verbosely (m a -> Sh (ShM m a)
forall x. m x -> Sh (ShM m x)
runInSh m a
a)
log_stdout_with :: MonadShControl m => (Text -> IO ()) -> m a -> m a
log_stdout_with :: forall (m :: * -> *) a.
MonadShControl m =>
(Text -> IO ()) -> m a -> m a
log_stdout_with Text -> IO ()
logger m a
a = ((forall x. m x -> Sh (ShM m x)) -> Sh (ShM m a)) -> m a
forall (m :: * -> *) a.
MonadShControl m =>
((forall x. m x -> Sh (ShM m x)) -> Sh (ShM m a)) -> m a
controlSh (((forall x. m x -> Sh (ShM m x)) -> Sh (ShM m a)) -> m a)
-> ((forall x. m x -> Sh (ShM m x)) -> Sh (ShM m a)) -> m a
forall a b. (a -> b) -> a -> b
$ \forall x. m x -> Sh (ShM m x)
runInSh -> (Text -> IO ()) -> Sh (ShM m a) -> Sh (ShM m a)
forall a. (Text -> IO ()) -> Sh a -> Sh a
S.log_stdout_with Text -> IO ()
logger (m a -> Sh (ShM m a)
forall x. m x -> Sh (ShM m x)
runInSh m a
a)
log_stderr_with :: MonadShControl m => (Text -> IO ()) -> m a -> m a
log_stderr_with :: forall (m :: * -> *) a.
MonadShControl m =>
(Text -> IO ()) -> m a -> m a
log_stderr_with Text -> IO ()
logger m a
a = ((forall x. m x -> Sh (ShM m x)) -> Sh (ShM m a)) -> m a
forall (m :: * -> *) a.
MonadShControl m =>
((forall x. m x -> Sh (ShM m x)) -> Sh (ShM m a)) -> m a
controlSh (((forall x. m x -> Sh (ShM m x)) -> Sh (ShM m a)) -> m a)
-> ((forall x. m x -> Sh (ShM m x)) -> Sh (ShM m a)) -> m a
forall a b. (a -> b) -> a -> b
$ \forall x. m x -> Sh (ShM m x)
runInSh -> (Text -> IO ()) -> Sh (ShM m a) -> Sh (ShM m a)
forall a. (Text -> IO ()) -> Sh a -> Sh a
S.log_stderr_with Text -> IO ()
logger (m a -> Sh (ShM m a)
forall x. m x -> Sh (ShM m x)
runInSh m a
a)
print_stdout :: MonadShControl m => Bool -> m a -> m a
print_stdout :: forall (m :: * -> *) a. MonadShControl m => Bool -> m a -> m a
print_stdout Bool
shouldPrint m a
a = ((forall x. m x -> Sh (ShM m x)) -> Sh (ShM m a)) -> m a
forall (m :: * -> *) a.
MonadShControl m =>
((forall x. m x -> Sh (ShM m x)) -> Sh (ShM m a)) -> m a
controlSh (((forall x. m x -> Sh (ShM m x)) -> Sh (ShM m a)) -> m a)
-> ((forall x. m x -> Sh (ShM m x)) -> Sh (ShM m a)) -> m a
forall a b. (a -> b) -> a -> b
$ \forall x. m x -> Sh (ShM m x)
runInSh -> Bool -> Sh (ShM m a) -> Sh (ShM m a)
forall a. Bool -> Sh a -> Sh a
S.print_stdout Bool
shouldPrint (m a -> Sh (ShM m a)
forall x. m x -> Sh (ShM m x)
runInSh m a
a)
print_stderr :: MonadShControl m => Bool -> m a -> m a
print_stderr :: forall (m :: * -> *) a. MonadShControl m => Bool -> m a -> m a
print_stderr Bool
shouldPrint m a
a = ((forall x. m x -> Sh (ShM m x)) -> Sh (ShM m a)) -> m a
forall (m :: * -> *) a.
MonadShControl m =>
((forall x. m x -> Sh (ShM m x)) -> Sh (ShM m a)) -> m a
controlSh (((forall x. m x -> Sh (ShM m x)) -> Sh (ShM m a)) -> m a)
-> ((forall x. m x -> Sh (ShM m x)) -> Sh (ShM m a)) -> m a
forall a b. (a -> b) -> a -> b
$ \forall x. m x -> Sh (ShM m x)
runInSh -> Bool -> Sh (ShM m a) -> Sh (ShM m a)
forall a. Bool -> Sh a -> Sh a
S.print_stderr Bool
shouldPrint (m a -> Sh (ShM m a)
forall x. m x -> Sh (ShM m x)
runInSh m a
a)
print_commands :: MonadShControl m => Bool -> m a -> m a
print_commands :: forall (m :: * -> *) a. MonadShControl m => Bool -> m a -> m a
print_commands Bool
shouldPrint m a
a = ((forall x. m x -> Sh (ShM m x)) -> Sh (ShM m a)) -> m a
forall (m :: * -> *) a.
MonadShControl m =>
((forall x. m x -> Sh (ShM m x)) -> Sh (ShM m a)) -> m a
controlSh (((forall x. m x -> Sh (ShM m x)) -> Sh (ShM m a)) -> m a)
-> ((forall x. m x -> Sh (ShM m x)) -> Sh (ShM m a)) -> m a
forall a b. (a -> b) -> a -> b
$ \forall x. m x -> Sh (ShM m x)
runInSh -> Bool -> Sh (ShM m a) -> Sh (ShM m a)
forall a. Bool -> Sh a -> Sh a
S.print_commands Bool
shouldPrint (m a -> Sh (ShM m a)
forall x. m x -> Sh (ShM m x)
runInSh m a
a)
sub :: MonadShControl m => m a -> m a
sub :: forall (m :: * -> *) a. MonadShControl m => m a -> m a
sub m a
a = ((forall x. m x -> Sh (ShM m x)) -> Sh (ShM m a)) -> m a
forall (m :: * -> *) a.
MonadShControl m =>
((forall x. m x -> Sh (ShM m x)) -> Sh (ShM m a)) -> m a
controlSh (((forall x. m x -> Sh (ShM m x)) -> Sh (ShM m a)) -> m a)
-> ((forall x. m x -> Sh (ShM m x)) -> Sh (ShM m a)) -> m a
forall a b. (a -> b) -> a -> b
$ \forall x. m x -> Sh (ShM m x)
runInSh -> Sh (ShM m a) -> Sh (ShM m a)
forall a. Sh a -> Sh a
S.sub (m a -> Sh (ShM m a)
forall x. m x -> Sh (ShM m x)
runInSh m a
a)
trace :: MonadSh m => Text -> m ()
trace :: forall (m :: * -> *). MonadSh m => Text -> m ()
trace = Sh () -> m ()
forall a. Sh a -> m a
forall (m :: * -> *) a. MonadSh m => Sh a -> m a
liftSh (Sh () -> m ()) -> (Text -> Sh ()) -> Text -> m ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Text -> Sh ()
S.trace
tracing :: MonadShControl m => Bool -> m a -> m a
tracing :: forall (m :: * -> *) a. MonadShControl m => Bool -> m a -> m a
tracing Bool
shouldTrace m a
action = ((forall x. m x -> Sh (ShM m x)) -> Sh (ShM m a)) -> m a
forall (m :: * -> *) a.
MonadShControl m =>
((forall x. m x -> Sh (ShM m x)) -> Sh (ShM m a)) -> m a
controlSh (((forall x. m x -> Sh (ShM m x)) -> Sh (ShM m a)) -> m a)
-> ((forall x. m x -> Sh (ShM m x)) -> Sh (ShM m a)) -> m a
forall a b. (a -> b) -> a -> b
$ \forall x. m x -> Sh (ShM m x)
runInSh -> Bool -> Sh (ShM m a) -> Sh (ShM m a)
forall a. Bool -> Sh a -> Sh a
S.tracing Bool
shouldTrace (m a -> Sh (ShM m a)
forall x. m x -> Sh (ShM m x)
runInSh m a
action)
escaping :: MonadShControl m => Bool -> m a -> m a
escaping :: forall (m :: * -> *) a. MonadShControl m => Bool -> m a -> m a
escaping Bool
shouldEscape m a
action = ((forall x. m x -> Sh (ShM m x)) -> Sh (ShM m a)) -> m a
forall (m :: * -> *) a.
MonadShControl m =>
((forall x. m x -> Sh (ShM m x)) -> Sh (ShM m a)) -> m a
controlSh (((forall x. m x -> Sh (ShM m x)) -> Sh (ShM m a)) -> m a)
-> ((forall x. m x -> Sh (ShM m x)) -> Sh (ShM m a)) -> m a
forall a b. (a -> b) -> a -> b
$ \forall x. m x -> Sh (ShM m x)
runInSh -> Bool -> Sh (ShM m a) -> Sh (ShM m a)
forall a. Bool -> Sh a -> Sh a
S.escaping Bool
shouldEscape (m a -> Sh (ShM m a)
forall x. m x -> Sh (ShM m x)
runInSh m a
action)
errExit :: MonadShControl m => Bool -> m a -> m a
errExit :: forall (m :: * -> *) a. MonadShControl m => Bool -> m a -> m a
errExit Bool
shouldExit m a
action = ((forall x. m x -> Sh (ShM m x)) -> Sh (ShM m a)) -> m a
forall (m :: * -> *) a.
MonadShControl m =>
((forall x. m x -> Sh (ShM m x)) -> Sh (ShM m a)) -> m a
controlSh (((forall x. m x -> Sh (ShM m x)) -> Sh (ShM m a)) -> m a)
-> ((forall x. m x -> Sh (ShM m x)) -> Sh (ShM m a)) -> m a
forall a b. (a -> b) -> a -> b
$ \forall x. m x -> Sh (ShM m x)
runInSh -> Bool -> Sh (ShM m a) -> Sh (ShM m a)
forall a. Bool -> Sh a -> Sh a
S.errExit Bool
shouldExit (m a -> Sh (ShM m a)
forall x. m x -> Sh (ShM m x)
runInSh m a
action)
followSymlink :: MonadShControl m => Bool -> m a -> m a
followSymlink :: forall (m :: * -> *) a. MonadShControl m => Bool -> m a -> m a
followSymlink Bool
enableFollowSymlink m a
action = ((forall x. m x -> Sh (ShM m x)) -> Sh (ShM m a)) -> m a
forall (m :: * -> *) a.
MonadShControl m =>
((forall x. m x -> Sh (ShM m x)) -> Sh (ShM m a)) -> m a
controlSh (((forall x. m x -> Sh (ShM m x)) -> Sh (ShM m a)) -> m a)
-> ((forall x. m x -> Sh (ShM m x)) -> Sh (ShM m a)) -> m a
forall a b. (a -> b) -> a -> b
$ \forall x. m x -> Sh (ShM m x)
runInSh -> Bool -> Sh (ShM m a) -> Sh (ShM m a)
forall a. Bool -> Sh a -> Sh a
S.followSymlink Bool
enableFollowSymlink (m a -> Sh (ShM m a)
forall x. m x -> Sh (ShM m x)
runInSh m a
action)
(-|-) :: (MonadShControl m, MonadSh m) => m Text -> m b -> m b
m Text
one -|- :: forall (m :: * -> *) b.
(MonadShControl m, MonadSh m) =>
m Text -> m b -> m b
-|- m b
two = ((forall x. m x -> Sh (ShM m x)) -> Sh (ShM m b)) -> m b
forall (m :: * -> *) a.
MonadShControl m =>
((forall x. m x -> Sh (ShM m x)) -> Sh (ShM m a)) -> m a
controlSh (((forall x. m x -> Sh (ShM m x)) -> Sh (ShM m b)) -> m b)
-> ((forall x. m x -> Sh (ShM m x)) -> Sh (ShM m b)) -> m b
forall a b. (a -> b) -> a -> b
$ \forall x. m x -> Sh (ShM m x)
runInSh -> do
ShM m Text
x <- m Text -> Sh (ShM m Text)
forall x. m x -> Sh (ShM m x)
runInSh m Text
one
m b -> Sh (ShM m b)
forall x. m x -> Sh (ShM m x)
runInSh (m b -> Sh (ShM m b)) -> m b -> Sh (ShM m b)
forall a b. (a -> b) -> a -> b
$ ShM m Text -> m Text
forall a. ShM m a -> m a
forall (m :: * -> *) a. MonadShControl m => ShM m a -> m a
restoreSh ShM m Text
x m Text -> (Text -> m b) -> m b
forall a b. m a -> (a -> m b) -> m b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= \Text
x' ->
((forall x. m x -> Sh (ShM m x)) -> Sh (ShM m b)) -> m b
forall (m :: * -> *) a.
MonadShControl m =>
((forall x. m x -> Sh (ShM m x)) -> Sh (ShM m a)) -> m a
controlSh (((forall x. m x -> Sh (ShM m x)) -> Sh (ShM m b)) -> m b)
-> ((forall x. m x -> Sh (ShM m x)) -> Sh (ShM m b)) -> m b
forall a b. (a -> b) -> a -> b
$ \forall x. m x -> Sh (ShM m x)
runInSh' -> Text -> Sh Text
forall a. a -> Sh a
forall (m :: * -> *) a. Monad m => a -> m a
return Text
x' Sh Text -> Sh (ShM m b) -> Sh (ShM m b)
forall b. Sh Text -> Sh b -> Sh b
S.-|- m b -> Sh (ShM m b)
forall x. m x -> Sh (ShM m x)
runInSh' m b
two
withTmpDir :: MonadShControl m => (FilePath -> m a) -> m a
withTmpDir :: forall (m :: * -> *) a.
MonadShControl m =>
(FilePath -> m a) -> m a
withTmpDir FilePath -> m a
action = ((forall x. m x -> Sh (ShM m x)) -> Sh (ShM m a)) -> m a
forall (m :: * -> *) a.
MonadShControl m =>
((forall x. m x -> Sh (ShM m x)) -> Sh (ShM m a)) -> m a
controlSh (((forall x. m x -> Sh (ShM m x)) -> Sh (ShM m a)) -> m a)
-> ((forall x. m x -> Sh (ShM m x)) -> Sh (ShM m a)) -> m a
forall a b. (a -> b) -> a -> b
$ \forall x. m x -> Sh (ShM m x)
runInSh -> (FilePath -> Sh (ShM m a)) -> Sh (ShM m a)
forall a. (FilePath -> Sh a) -> Sh a
S.withTmpDir ((m a -> Sh (ShM m a))
-> (FilePath -> m a) -> FilePath -> Sh (ShM m a)
forall a b. (a -> b) -> (FilePath -> a) -> FilePath -> b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap m a -> Sh (ShM m a)
forall x. m x -> Sh (ShM m x)
runInSh FilePath -> m a
action)
time :: MonadShControl m => m a -> m (Double, a)
time :: forall (m :: * -> *) a. MonadShControl m => m a -> m (Double, a)
time m a
what = ((forall x. m x -> Sh (ShM m x)) -> Sh (ShM m (Double, a)))
-> m (Double, a)
forall (m :: * -> *) a.
MonadShControl m =>
((forall x. m x -> Sh (ShM m x)) -> Sh (ShM m a)) -> m a
controlSh (((forall x. m x -> Sh (ShM m x)) -> Sh (ShM m (Double, a)))
-> m (Double, a))
-> ((forall x. m x -> Sh (ShM m x)) -> Sh (ShM m (Double, a)))
-> m (Double, a)
forall a b. (a -> b) -> a -> b
$ \forall x. m x -> Sh (ShM m x)
runInSh -> do
(Double
d, ShM m a
a) <- Sh (ShM m a) -> Sh (Double, ShM m a)
forall a. Sh a -> Sh (Double, a)
S.time (m a -> Sh (ShM m a)
forall x. m x -> Sh (ShM m x)
runInSh m a
what)
m (Double, a) -> Sh (ShM m (Double, a))
forall x. m x -> Sh (ShM m x)
runInSh (m (Double, a) -> Sh (ShM m (Double, a)))
-> m (Double, a) -> Sh (ShM m (Double, a))
forall a b. (a -> b) -> a -> b
$ ShM m a -> m a
forall a. ShM m a -> m a
forall (m :: * -> *) a. MonadShControl m => ShM m a -> m a
restoreSh ShM m a
a m a -> (a -> m (Double, a)) -> m (Double, a)
forall a b. m a -> (a -> m b) -> m b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= \a
x -> (Double, a) -> m (Double, a)
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (Double
d, a
x)
toTextWarn :: MonadSh m => FilePath -> m Text
toTextWarn :: forall (m :: * -> *). MonadSh m => FilePath -> m Text
toTextWarn = Sh Text -> m Text
forall a. Sh a -> m a
forall (m :: * -> *) a. MonadSh m => Sh a -> m a
liftSh (Sh Text -> m Text) -> (FilePath -> Sh Text) -> FilePath -> m Text
forall b c a. (b -> c) -> (a -> b) -> a -> c
. FilePath -> Sh Text
forall (m :: * -> *). MonadSh m => FilePath -> m Text
toTextWarn
transferLinesAndCombine :: MonadIO m => Handle -> (Text -> IO ()) -> m Text
transferLinesAndCombine :: forall (m :: * -> *).
MonadIO m =>
Handle -> (Text -> IO ()) -> m Text
transferLinesAndCombine = (IO Text -> m Text
forall a. IO a -> m a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO Text -> m Text)
-> ((Text -> IO ()) -> IO Text) -> (Text -> IO ()) -> m Text
forall b c a. (b -> c) -> (a -> b) -> a -> c
.) (((Text -> IO ()) -> IO Text) -> (Text -> IO ()) -> m Text)
-> (Handle -> (Text -> IO ()) -> IO Text)
-> Handle
-> (Text -> IO ())
-> m Text
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Handle -> (Text -> IO ()) -> IO Text
S.transferLinesAndCombine
get :: MonadSh m => m S.State
get :: forall (m :: * -> *). MonadSh m => m State
get = Sh State -> m State
forall a. Sh a -> m a
forall (m :: * -> *) a. MonadSh m => Sh a -> m a
liftSh Sh State
S.get
put :: MonadSh m => S.State -> m ()
put :: forall (m :: * -> *). MonadSh m => State -> m ()
put = Sh () -> m ()
forall a. Sh a -> m a
forall (m :: * -> *) a. MonadSh m => Sh a -> m a
liftSh (Sh () -> m ()) -> (State -> Sh ()) -> State -> m ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. State -> Sh ()
S.put
catch_sh :: Exception e => Sh a -> (e -> Sh a) -> Sh a
catch_sh :: forall e a. Exception e => Sh a -> (e -> Sh a) -> Sh a
catch_sh = Sh a -> (e -> Sh a) -> Sh a
forall (m :: * -> *) e a.
(MonadBaseControl IO m, Exception e) =>
m a -> (e -> m a) -> m a
Control.Exception.Lifted.catch
{-# DEPRECATED catch_sh "use Control.Exception.Lifted.catch instead" #-}
handle_sh :: Exception e => (e -> Sh a) -> Sh a -> Sh a
handle_sh :: forall e a. Exception e => (e -> Sh a) -> Sh a -> Sh a
handle_sh = (e -> Sh a) -> Sh a -> Sh a
forall (m :: * -> *) e a.
(MonadBaseControl IO m, Exception e) =>
(e -> m a) -> m a -> m a
handle
{-# DEPRECATED handle_sh "use Control.Exception.Lifted.handle instead" #-}
finally_sh :: Sh a -> Sh b -> Sh a
finally_sh :: forall a b. Sh a -> Sh b -> Sh a
finally_sh = Sh a -> Sh b -> Sh a
forall (m :: * -> *) a b.
MonadBaseControl IO m =>
m a -> m b -> m a
finally
{-# DEPRECATED finally_sh "use Control.Exception.Lifted.finally instead" #-}
bracket_sh :: Sh a -> (a -> Sh b) -> (a -> Sh c) -> Sh c
bracket_sh :: forall a b c. Sh a -> (a -> Sh b) -> (a -> Sh c) -> Sh c
bracket_sh = Sh a -> (a -> Sh b) -> (a -> Sh c) -> Sh c
forall (m :: * -> *) a b c.
MonadBaseControl IO m =>
m a -> (a -> m b) -> (a -> m c) -> m c
bracket
{-# DEPRECATED bracket_sh "use Control.Exception.Lifted.bracket instead" #-}
catches_sh :: Sh a -> [Handler Sh a] -> Sh a
catches_sh :: forall a. Sh a -> [Handler Sh a] -> Sh a
catches_sh = Sh a -> [Handler Sh a] -> Sh a
forall (m :: * -> *) a.
MonadBaseControl IO m =>
m a -> [Handler m a] -> m a
catches
{-# DEPRECATED catches_sh "use Control.Exception.Lifted.catches instead" #-}
catchany_sh :: Sh a -> (SomeException -> Sh a) -> Sh a
catchany_sh :: forall a. Sh a -> (SomeException -> Sh a) -> Sh a
catchany_sh = Sh a -> (SomeException -> Sh a) -> Sh a
forall (m :: * -> *) a.
MonadBaseControl IO m =>
m a -> (SomeException -> m a) -> m a
catchAny
{-# DEPRECATED catchany_sh "use Control.Exception.Enclosed.catchAny instead" #-}
handleany_sh :: (SomeException -> Sh a) -> Sh a -> Sh a
handleany_sh :: forall a. (SomeException -> Sh a) -> Sh a -> Sh a
handleany_sh = (SomeException -> Sh a) -> Sh a -> Sh a
forall (m :: * -> *) a.
MonadBaseControl IO m =>
(SomeException -> m a) -> m a -> m a
handleAny
{-# DEPRECATED handleany_sh "use Control.Exception.Enclosed.handleAny instead" #-}
cd :: MonadSh m => FilePath -> m ()
cd :: forall (m :: * -> *). MonadSh m => FilePath -> m ()
cd = Sh () -> m ()
forall a. Sh a -> m a
forall (m :: * -> *) a. MonadSh m => Sh a -> m a
liftSh (Sh () -> m ()) -> (FilePath -> Sh ()) -> FilePath -> m ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. FilePath -> Sh ()
S.cd
mv :: MonadSh m => FilePath -> FilePath -> m ()
mv :: forall (m :: * -> *). MonadSh m => FilePath -> FilePath -> m ()
mv = (Sh () -> m ()
forall a. Sh a -> m a
forall (m :: * -> *) a. MonadSh m => Sh a -> m a
liftSh (Sh () -> m ()) -> (FilePath -> Sh ()) -> FilePath -> m ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
.) ((FilePath -> Sh ()) -> FilePath -> m ())
-> (FilePath -> FilePath -> Sh ()) -> FilePath -> FilePath -> m ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. FilePath -> FilePath -> Sh ()
S.mv
lsT :: MonadSh m => FilePath -> m [Text]
lsT :: forall (m :: * -> *). MonadSh m => FilePath -> m [Text]
lsT = Sh [Text] -> m [Text]
forall a. Sh a -> m a
forall (m :: * -> *) a. MonadSh m => Sh a -> m a
liftSh (Sh [Text] -> m [Text])
-> (FilePath -> Sh [Text]) -> FilePath -> m [Text]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. FilePath -> Sh [Text]
S.lsT
pwd :: MonadSh m => m FilePath
pwd :: forall (m :: * -> *). MonadSh m => m FilePath
pwd = Sh FilePath -> m FilePath
forall a. Sh a -> m a
forall (m :: * -> *) a. MonadSh m => Sh a -> m a
liftSh Sh FilePath
S.pwd
exit :: MonadSh m => Int -> m a
exit :: forall (m :: * -> *) a. MonadSh m => Int -> m a
exit = Sh a -> m a
forall a. Sh a -> m a
forall (m :: * -> *) a. MonadSh m => Sh a -> m a
liftSh (Sh a -> m a) -> (Int -> Sh a) -> Int -> m a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Int -> Sh a
forall a. Int -> Sh a
S.exit
errorExit :: MonadSh m => Text -> m a
errorExit :: forall (m :: * -> *) a. MonadSh m => Text -> m a
errorExit = Sh a -> m a
forall a. Sh a -> m a
forall (m :: * -> *) a. MonadSh m => Sh a -> m a
liftSh (Sh a -> m a) -> (Text -> Sh a) -> Text -> m a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Text -> Sh a
forall a. Text -> Sh a
S.errorExit
quietExit :: MonadSh m => Int -> m a
quietExit :: forall (m :: * -> *) a. MonadSh m => Int -> m a
quietExit = Sh a -> m a
forall a. Sh a -> m a
forall (m :: * -> *) a. MonadSh m => Sh a -> m a
liftSh (Sh a -> m a) -> (Int -> Sh a) -> Int -> m a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Int -> Sh a
forall a. Int -> Sh a
S.quietExit
terror :: MonadSh m => Text -> m a
terror :: forall (m :: * -> *) a. MonadSh m => Text -> m a
terror = Sh a -> m a
forall a. Sh a -> m a
forall (m :: * -> *) a. MonadSh m => Sh a -> m a
liftSh (Sh a -> m a) -> (Text -> Sh a) -> Text -> m a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Text -> Sh a
forall a. Text -> Sh a
S.terror
mkdir :: MonadSh m => FilePath -> m ()
mkdir :: forall (m :: * -> *). MonadSh m => FilePath -> m ()
mkdir = Sh () -> m ()
forall a. Sh a -> m a
forall (m :: * -> *) a. MonadSh m => Sh a -> m a
liftSh (Sh () -> m ()) -> (FilePath -> Sh ()) -> FilePath -> m ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. FilePath -> Sh ()
S.mkdir
mkdir_p :: MonadSh m => FilePath -> m ()
mkdir_p :: forall (m :: * -> *). MonadSh m => FilePath -> m ()
mkdir_p = Sh () -> m ()
forall a. Sh a -> m a
forall (m :: * -> *) a. MonadSh m => Sh a -> m a
liftSh (Sh () -> m ()) -> (FilePath -> Sh ()) -> FilePath -> m ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. FilePath -> Sh ()
S.mkdir_p
mkdirTree :: MonadSh m => Tree FilePath -> m ()
mkdirTree :: forall (m :: * -> *). MonadSh m => Tree FilePath -> m ()
mkdirTree = Sh () -> m ()
forall a. Sh a -> m a
forall (m :: * -> *) a. MonadSh m => Sh a -> m a
liftSh (Sh () -> m ())
-> (Tree FilePath -> Sh ()) -> Tree FilePath -> m ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Tree FilePath -> Sh ()
S.mkdirTree
which :: MonadSh m => FilePath -> m (Maybe FilePath)
which :: forall (m :: * -> *). MonadSh m => FilePath -> m (Maybe FilePath)
which = Sh (Maybe FilePath) -> m (Maybe FilePath)
forall a. Sh a -> m a
forall (m :: * -> *) a. MonadSh m => Sh a -> m a
liftSh (Sh (Maybe FilePath) -> m (Maybe FilePath))
-> (FilePath -> Sh (Maybe FilePath))
-> FilePath
-> m (Maybe FilePath)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. FilePath -> Sh (Maybe FilePath)
S.which
test_e :: MonadSh m => FilePath -> m Bool
test_e :: forall (m :: * -> *). MonadSh m => FilePath -> m Bool
test_e = Sh Bool -> m Bool
forall a. Sh a -> m a
forall (m :: * -> *) a. MonadSh m => Sh a -> m a
liftSh (Sh Bool -> m Bool) -> (FilePath -> Sh Bool) -> FilePath -> m Bool
forall b c a. (b -> c) -> (a -> b) -> a -> c
. FilePath -> Sh Bool
S.test_e
test_f :: MonadSh m => FilePath -> m Bool
test_f :: forall (m :: * -> *). MonadSh m => FilePath -> m Bool
test_f = Sh Bool -> m Bool
forall a. Sh a -> m a
forall (m :: * -> *) a. MonadSh m => Sh a -> m a
liftSh (Sh Bool -> m Bool) -> (FilePath -> Sh Bool) -> FilePath -> m Bool
forall b c a. (b -> c) -> (a -> b) -> a -> c
. FilePath -> Sh Bool
S.test_f
test_px :: MonadSh m => FilePath -> m Bool
test_px :: forall (m :: * -> *). MonadSh m => FilePath -> m Bool
test_px = Sh Bool -> m Bool
forall a. Sh a -> m a
forall (m :: * -> *) a. MonadSh m => Sh a -> m a
liftSh (Sh Bool -> m Bool) -> (FilePath -> Sh Bool) -> FilePath -> m Bool
forall b c a. (b -> c) -> (a -> b) -> a -> c
. FilePath -> Sh Bool
S.test_px
rm_rf :: MonadSh m => FilePath -> m ()
rm_rf :: forall (m :: * -> *). MonadSh m => FilePath -> m ()
rm_rf = Sh () -> m ()
forall a. Sh a -> m a
forall (m :: * -> *) a. MonadSh m => Sh a -> m a
liftSh (Sh () -> m ()) -> (FilePath -> Sh ()) -> FilePath -> m ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. FilePath -> Sh ()
S.rm_rf
rm_f :: MonadSh m => FilePath -> m ()
rm_f :: forall (m :: * -> *). MonadSh m => FilePath -> m ()
rm_f = Sh () -> m ()
forall a. Sh a -> m a
forall (m :: * -> *) a. MonadSh m => Sh a -> m a
liftSh (Sh () -> m ()) -> (FilePath -> Sh ()) -> FilePath -> m ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. FilePath -> Sh ()
S.rm_f
rm :: MonadSh m => FilePath -> m ()
rm :: forall (m :: * -> *). MonadSh m => FilePath -> m ()
rm = Sh () -> m ()
forall a. Sh a -> m a
forall (m :: * -> *) a. MonadSh m => Sh a -> m a
liftSh (Sh () -> m ()) -> (FilePath -> Sh ()) -> FilePath -> m ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. FilePath -> Sh ()
S.rm
setenv :: MonadSh m => Text -> Text -> m ()
setenv :: forall (m :: * -> *). MonadSh m => Text -> Text -> m ()
setenv = (Sh () -> m ()
forall a. Sh a -> m a
forall (m :: * -> *) a. MonadSh m => Sh a -> m a
liftSh (Sh () -> m ()) -> (Text -> Sh ()) -> Text -> m ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
.) ((Text -> Sh ()) -> Text -> m ())
-> (Text -> Text -> Sh ()) -> Text -> Text -> m ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Text -> Text -> Sh ()
S.setenv
appendToPath :: MonadSh m => FilePath -> m ()
appendToPath :: forall (m :: * -> *). MonadSh m => FilePath -> m ()
appendToPath = Sh () -> m ()
forall a. Sh a -> m a
forall (m :: * -> *) a. MonadSh m => Sh a -> m a
liftSh (Sh () -> m ()) -> (FilePath -> Sh ()) -> FilePath -> m ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. FilePath -> Sh ()
S.appendToPath
prependToPath :: MonadSh m => FilePath -> m ()
prependToPath :: forall (m :: * -> *). MonadSh m => FilePath -> m ()
prependToPath = Sh () -> m ()
forall a. Sh a -> m a
forall (m :: * -> *) a. MonadSh m => Sh a -> m a
liftSh (Sh () -> m ()) -> (FilePath -> Sh ()) -> FilePath -> m ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. FilePath -> Sh ()
S.prependToPath
get_env_all :: MonadSh m => m [(String, String)]
get_env_all :: forall (m :: * -> *). MonadSh m => m [(FilePath, FilePath)]
get_env_all = Sh [(FilePath, FilePath)] -> m [(FilePath, FilePath)]
forall a. Sh a -> m a
forall (m :: * -> *) a. MonadSh m => Sh a -> m a
liftSh Sh [(FilePath, FilePath)]
S.get_env_all
get_env :: MonadSh m => Text -> m (Maybe Text)
get_env :: forall (m :: * -> *). MonadSh m => Text -> m (Maybe Text)
get_env = Sh (Maybe Text) -> m (Maybe Text)
forall a. Sh a -> m a
forall (m :: * -> *) a. MonadSh m => Sh a -> m a
liftSh (Sh (Maybe Text) -> m (Maybe Text))
-> (Text -> Sh (Maybe Text)) -> Text -> m (Maybe Text)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Text -> Sh (Maybe Text)
S.get_env
get_env_text :: MonadSh m => Text -> m Text
get_env_text :: forall (m :: * -> *). MonadSh m => Text -> m Text
get_env_text = Sh Text -> m Text
forall a. Sh a -> m a
forall (m :: * -> *) a. MonadSh m => Sh a -> m a
liftSh (Sh Text -> m Text) -> (Text -> Sh Text) -> Text -> m Text
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Text -> Sh Text
S.get_env_text
sshPairs_ :: MonadSh m => Text -> [(FilePath, [Text])] -> m ()
sshPairs_ :: forall (m :: * -> *).
MonadSh m =>
Text -> [(FilePath, [Text])] -> m ()
sshPairs_ = (Sh () -> m ()
forall a. Sh a -> m a
forall (m :: * -> *) a. MonadSh m => Sh a -> m a
liftSh (Sh () -> m ())
-> ([(FilePath, [Text])] -> Sh ()) -> [(FilePath, [Text])] -> m ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
.) (([(FilePath, [Text])] -> Sh ()) -> [(FilePath, [Text])] -> m ())
-> (Text -> [(FilePath, [Text])] -> Sh ())
-> Text
-> [(FilePath, [Text])]
-> m ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Text -> [(FilePath, [Text])] -> Sh ()
S.sshPairs_
sshPairs :: MonadSh m => Text -> [(FilePath, [Text])] -> m Text
sshPairs :: forall (m :: * -> *).
MonadSh m =>
Text -> [(FilePath, [Text])] -> m Text
sshPairs = (Sh Text -> m Text
forall a. Sh a -> m a
forall (m :: * -> *) a. MonadSh m => Sh a -> m a
liftSh (Sh Text -> m Text)
-> ([(FilePath, [Text])] -> Sh Text)
-> [(FilePath, [Text])]
-> m Text
forall b c a. (b -> c) -> (a -> b) -> a -> c
.) (([(FilePath, [Text])] -> Sh Text)
-> [(FilePath, [Text])] -> m Text)
-> (Text -> [(FilePath, [Text])] -> Sh Text)
-> Text
-> [(FilePath, [Text])]
-> m Text
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Text -> [(FilePath, [Text])] -> Sh Text
S.sshPairs
run :: MonadSh m => FilePath -> [Text] -> m Text
run :: forall (m :: * -> *). MonadSh m => FilePath -> [Text] -> m Text
run = (Sh Text -> m Text
forall a. Sh a -> m a
forall (m :: * -> *) a. MonadSh m => Sh a -> m a
liftSh (Sh Text -> m Text) -> ([Text] -> Sh Text) -> [Text] -> m Text
forall b c a. (b -> c) -> (a -> b) -> a -> c
.) (([Text] -> Sh Text) -> [Text] -> m Text)
-> (FilePath -> [Text] -> Sh Text) -> FilePath -> [Text] -> m Text
forall b c a. (b -> c) -> (a -> b) -> a -> c
. FilePath -> [Text] -> Sh Text
S.run
command :: MonadSh m => FilePath -> [Text] -> [Text] -> m Text
command :: forall (m :: * -> *).
MonadSh m =>
FilePath -> [Text] -> [Text] -> m Text
command FilePath
com [Text]
args [Text]
more_args =
Sh Text -> m Text
forall a. Sh a -> m a
forall (m :: * -> *) a. MonadSh m => Sh a -> m a
liftSh (Sh Text -> m Text) -> Sh Text -> m Text
forall a b. (a -> b) -> a -> b
$ FilePath -> [Text] -> [Text] -> Sh Text
S.command FilePath
com [Text]
args [Text]
more_args
command_ :: MonadSh m => FilePath -> [Text] -> [Text] -> m ()
command_ :: forall (m :: * -> *).
MonadSh m =>
FilePath -> [Text] -> [Text] -> m ()
command_ FilePath
com [Text]
args [Text]
more_args =
Sh () -> m ()
forall a. Sh a -> m a
forall (m :: * -> *) a. MonadSh m => Sh a -> m a
liftSh (Sh () -> m ()) -> Sh () -> m ()
forall a b. (a -> b) -> a -> b
$ FilePath -> [Text] -> [Text] -> Sh ()
S.command_ FilePath
com [Text]
args [Text]
more_args
command1 :: MonadSh m => FilePath -> [Text] -> Text -> [Text] -> m Text
command1 :: forall (m :: * -> *).
MonadSh m =>
FilePath -> [Text] -> Text -> [Text] -> m Text
command1 FilePath
com [Text]
args Text
one_arg [Text]
more_args =
Sh Text -> m Text
forall a. Sh a -> m a
forall (m :: * -> *) a. MonadSh m => Sh a -> m a
liftSh (Sh Text -> m Text) -> Sh Text -> m Text
forall a b. (a -> b) -> a -> b
$ FilePath -> [Text] -> Text -> [Text] -> Sh Text
S.command1 FilePath
com [Text]
args Text
one_arg [Text]
more_args
command1_ :: MonadSh m => FilePath -> [Text] -> Text -> [Text] -> m ()
command1_ :: forall (m :: * -> *).
MonadSh m =>
FilePath -> [Text] -> Text -> [Text] -> m ()
command1_ FilePath
com [Text]
args Text
one_arg [Text]
more_args =
Sh () -> m ()
forall a. Sh a -> m a
forall (m :: * -> *) a. MonadSh m => Sh a -> m a
liftSh (Sh () -> m ()) -> Sh () -> m ()
forall a b. (a -> b) -> a -> b
$ FilePath -> [Text] -> Text -> [Text] -> Sh ()
S.command1_ FilePath
com [Text]
args Text
one_arg [Text]
more_args
run_ :: MonadSh m => FilePath -> [Text] -> m ()
run_ :: forall (m :: * -> *). MonadSh m => FilePath -> [Text] -> m ()
run_ = (Sh () -> m ()
forall a. Sh a -> m a
forall (m :: * -> *) a. MonadSh m => Sh a -> m a
liftSh (Sh () -> m ()) -> ([Text] -> Sh ()) -> [Text] -> m ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
.) (([Text] -> Sh ()) -> [Text] -> m ())
-> (FilePath -> [Text] -> Sh ()) -> FilePath -> [Text] -> m ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. FilePath -> [Text] -> Sh ()
S.run_
runHandle :: MonadShControl m => FilePath
-> [Text]
-> (Handle -> m a)
-> m a
runHandle :: forall (m :: * -> *) a.
MonadShControl m =>
FilePath -> [Text] -> (Handle -> m a) -> m a
runHandle FilePath
exe [Text]
args Handle -> m a
withHandle =
((forall x. m x -> Sh (ShM m x)) -> Sh (ShM m a)) -> m a
forall (m :: * -> *) a.
MonadShControl m =>
((forall x. m x -> Sh (ShM m x)) -> Sh (ShM m a)) -> m a
controlSh (((forall x. m x -> Sh (ShM m x)) -> Sh (ShM m a)) -> m a)
-> ((forall x. m x -> Sh (ShM m x)) -> Sh (ShM m a)) -> m a
forall a b. (a -> b) -> a -> b
$ \forall x. m x -> Sh (ShM m x)
runInSh -> FilePath -> [Text] -> (Handle -> Sh (ShM m a)) -> Sh (ShM m a)
forall a. FilePath -> [Text] -> (Handle -> Sh a) -> Sh a
S.runHandle FilePath
exe [Text]
args ((m a -> Sh (ShM m a)) -> (Handle -> m a) -> Handle -> Sh (ShM m a)
forall a b. (a -> b) -> (Handle -> a) -> Handle -> b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap m a -> Sh (ShM m a)
forall x. m x -> Sh (ShM m x)
runInSh Handle -> m a
withHandle)
runHandles :: MonadShControl m => FilePath
-> [Text]
-> [S.StdHandle]
-> (Handle -> Handle -> Handle -> m a)
-> m a
runHandles :: forall (m :: * -> *) a.
MonadShControl m =>
FilePath
-> [Text]
-> [StdHandle]
-> (Handle -> Handle -> Handle -> m a)
-> m a
runHandles FilePath
exe [Text]
args [StdHandle]
reusedHandles Handle -> Handle -> Handle -> m a
withHandles =
((forall x. m x -> Sh (ShM m x)) -> Sh (ShM m a)) -> m a
forall (m :: * -> *) a.
MonadShControl m =>
((forall x. m x -> Sh (ShM m x)) -> Sh (ShM m a)) -> m a
controlSh (((forall x. m x -> Sh (ShM m x)) -> Sh (ShM m a)) -> m a)
-> ((forall x. m x -> Sh (ShM m x)) -> Sh (ShM m a)) -> m a
forall a b. (a -> b) -> a -> b
$ \forall x. m x -> Sh (ShM m x)
runInSh ->
FilePath
-> [Text]
-> [StdHandle]
-> (Handle -> Handle -> Handle -> Sh (ShM m a))
-> Sh (ShM m a)
forall a.
FilePath
-> [Text]
-> [StdHandle]
-> (Handle -> Handle -> Handle -> Sh a)
-> Sh a
S.runHandles FilePath
exe [Text]
args [StdHandle]
reusedHandles (((Handle -> Handle -> m a) -> Handle -> Handle -> Sh (ShM m a))
-> (Handle -> Handle -> Handle -> m a)
-> Handle
-> Handle
-> Handle
-> Sh (ShM m a)
forall a b. (a -> b) -> (Handle -> a) -> Handle -> b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (((Handle -> m a) -> Handle -> Sh (ShM m a))
-> (Handle -> Handle -> m a) -> Handle -> Handle -> Sh (ShM m a)
forall a b. (a -> b) -> (Handle -> a) -> Handle -> b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap ((m a -> Sh (ShM m a)) -> (Handle -> m a) -> Handle -> Sh (ShM m a)
forall a b. (a -> b) -> (Handle -> a) -> Handle -> b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap m a -> Sh (ShM m a)
forall x. m x -> Sh (ShM m x)
runInSh)) Handle -> Handle -> Handle -> m a
withHandles)
runFoldLines :: MonadSh m => a -> S.FoldCallback a -> FilePath -> [Text] -> m a
runFoldLines :: forall (m :: * -> *) a.
MonadSh m =>
a -> FoldCallback a -> FilePath -> [Text] -> m a
runFoldLines a
start FoldCallback a
cb FilePath
exe [Text]
args = Sh a -> m a
forall a. Sh a -> m a
forall (m :: * -> *) a. MonadSh m => Sh a -> m a
liftSh (Sh a -> m a) -> Sh a -> m a
forall a b. (a -> b) -> a -> b
$ a -> FoldCallback a -> FilePath -> [Text] -> Sh a
forall a. a -> FoldCallback a -> FilePath -> [Text] -> Sh a
S.runFoldLines a
start FoldCallback a
cb FilePath
exe [Text]
args
lastStderr :: MonadSh m => m Text
lastStderr :: forall (m :: * -> *). MonadSh m => m Text
lastStderr = Sh Text -> m Text
forall a. Sh a -> m a
forall (m :: * -> *) a. MonadSh m => Sh a -> m a
liftSh Sh Text
S.lastStderr
lastExitCode :: MonadSh m => m Int
lastExitCode :: forall (m :: * -> *). MonadSh m => m Int
lastExitCode = Sh Int -> m Int
forall a. Sh a -> m a
forall (m :: * -> *) a. MonadSh m => Sh a -> m a
liftSh Sh Int
S.lastExitCode
setStdin :: MonadSh m => Text -> m ()
setStdin :: forall (m :: * -> *). MonadSh m => Text -> m ()
setStdin = Sh () -> m ()
forall a. Sh a -> m a
forall (m :: * -> *) a. MonadSh m => Sh a -> m a
liftSh (Sh () -> m ()) -> (Text -> Sh ()) -> Text -> m ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Text -> Sh ()
S.setStdin
cp_r :: MonadSh m => FilePath -> FilePath -> m ()
cp_r :: forall (m :: * -> *). MonadSh m => FilePath -> FilePath -> m ()
cp_r = (Sh () -> m ()
forall a. Sh a -> m a
forall (m :: * -> *) a. MonadSh m => Sh a -> m a
liftSh (Sh () -> m ()) -> (FilePath -> Sh ()) -> FilePath -> m ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
.) ((FilePath -> Sh ()) -> FilePath -> m ())
-> (FilePath -> FilePath -> Sh ()) -> FilePath -> FilePath -> m ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. FilePath -> FilePath -> Sh ()
S.cp_r
cp :: MonadSh m => FilePath -> FilePath -> m ()
cp :: forall (m :: * -> *). MonadSh m => FilePath -> FilePath -> m ()
cp = (Sh () -> m ()
forall a. Sh a -> m a
forall (m :: * -> *) a. MonadSh m => Sh a -> m a
liftSh (Sh () -> m ()) -> (FilePath -> Sh ()) -> FilePath -> m ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
.) ((FilePath -> Sh ()) -> FilePath -> m ())
-> (FilePath -> FilePath -> Sh ()) -> FilePath -> FilePath -> m ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. FilePath -> FilePath -> Sh ()
S.cp
writefile :: MonadSh m => FilePath -> Text -> m ()
writefile :: forall (m :: * -> *). MonadSh m => FilePath -> Text -> m ()
writefile = (Sh () -> m ()
forall a. Sh a -> m a
forall (m :: * -> *) a. MonadSh m => Sh a -> m a
liftSh (Sh () -> m ()) -> (Text -> Sh ()) -> Text -> m ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
.) ((Text -> Sh ()) -> Text -> m ())
-> (FilePath -> Text -> Sh ()) -> FilePath -> Text -> m ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. FilePath -> Text -> Sh ()
S.writefile
touchfile :: MonadSh m => FilePath -> m ()
touchfile :: forall (m :: * -> *). MonadSh m => FilePath -> m ()
touchfile = Sh () -> m ()
forall a. Sh a -> m a
forall (m :: * -> *) a. MonadSh m => Sh a -> m a
liftSh (Sh () -> m ()) -> (FilePath -> Sh ()) -> FilePath -> m ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. FilePath -> Sh ()
S.touchfile
appendfile :: MonadSh m => FilePath -> Text -> m ()
appendfile :: forall (m :: * -> *). MonadSh m => FilePath -> Text -> m ()
appendfile = (Sh () -> m ()
forall a. Sh a -> m a
forall (m :: * -> *) a. MonadSh m => Sh a -> m a
liftSh (Sh () -> m ()) -> (Text -> Sh ()) -> Text -> m ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
.) ((Text -> Sh ()) -> Text -> m ())
-> (FilePath -> Text -> Sh ()) -> FilePath -> Text -> m ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. FilePath -> Text -> Sh ()
S.appendfile
readfile :: MonadSh m => FilePath -> m Text
readfile :: forall (m :: * -> *). MonadSh m => FilePath -> m Text
readfile = Sh Text -> m Text
forall a. Sh a -> m a
forall (m :: * -> *) a. MonadSh m => Sh a -> m a
liftSh (Sh Text -> m Text) -> (FilePath -> Sh Text) -> FilePath -> m Text
forall b c a. (b -> c) -> (a -> b) -> a -> c
. FilePath -> Sh Text
S.readfile
readBinary :: MonadSh m => FilePath -> m ByteString
readBinary :: forall (m :: * -> *). MonadSh m => FilePath -> m ByteString
readBinary = Sh ByteString -> m ByteString
forall a. Sh a -> m a
forall (m :: * -> *) a. MonadSh m => Sh a -> m a
liftSh (Sh ByteString -> m ByteString)
-> (FilePath -> Sh ByteString) -> FilePath -> m ByteString
forall b c a. (b -> c) -> (a -> b) -> a -> c
. FilePath -> Sh ByteString
S.readBinary
sleep :: MonadSh m => Int -> m ()
sleep :: forall (m :: * -> *). MonadSh m => Int -> m ()
sleep = Sh () -> m ()
forall a. Sh a -> m a
forall (m :: * -> *) a. MonadSh m => Sh a -> m a
liftSh (Sh () -> m ()) -> (Int -> Sh ()) -> Int -> m ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Int -> Sh ()
S.sleep
echo, echo_n, echo_err, echo_n_err :: MonadSh m => Text -> m ()
echo :: forall (m :: * -> *). MonadSh m => Text -> m ()
echo = Sh () -> m ()
forall a. Sh a -> m a
forall (m :: * -> *) a. MonadSh m => Sh a -> m a
liftSh (Sh () -> m ()) -> (Text -> Sh ()) -> Text -> m ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Text -> Sh ()
S.echo
echo_n :: forall (m :: * -> *). MonadSh m => Text -> m ()
echo_n = Sh () -> m ()
forall a. Sh a -> m a
forall (m :: * -> *) a. MonadSh m => Sh a -> m a
liftSh (Sh () -> m ()) -> (Text -> Sh ()) -> Text -> m ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Text -> Sh ()
S.echo_n
echo_err :: forall (m :: * -> *). MonadSh m => Text -> m ()
echo_err = Sh () -> m ()
forall a. Sh a -> m a
forall (m :: * -> *) a. MonadSh m => Sh a -> m a
liftSh (Sh () -> m ()) -> (Text -> Sh ()) -> Text -> m ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Text -> Sh ()
S.echo_err
echo_n_err :: forall (m :: * -> *). MonadSh m => Text -> m ()
echo_n_err = Sh () -> m ()
forall a. Sh a -> m a
forall (m :: * -> *) a. MonadSh m => Sh a -> m a
liftSh (Sh () -> m ()) -> (Text -> Sh ()) -> Text -> m ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Text -> Sh ()
S.echo_n_err
relPath :: MonadSh m => FilePath -> m FilePath
relPath :: forall (m :: * -> *). MonadSh m => FilePath -> m FilePath
relPath = Sh FilePath -> m FilePath
forall a. Sh a -> m a
forall (m :: * -> *) a. MonadSh m => Sh a -> m a
liftSh (Sh FilePath -> m FilePath)
-> (FilePath -> Sh FilePath) -> FilePath -> m FilePath
forall b c a. (b -> c) -> (a -> b) -> a -> c
. FilePath -> Sh FilePath
S.relPath
relativeTo :: MonadSh m => FilePath
-> FilePath
-> m FilePath
relativeTo :: forall (m :: * -> *).
MonadSh m =>
FilePath -> FilePath -> m FilePath
relativeTo = (Sh FilePath -> m FilePath
forall a. Sh a -> m a
forall (m :: * -> *) a. MonadSh m => Sh a -> m a
liftSh (Sh FilePath -> m FilePath)
-> (FilePath -> Sh FilePath) -> FilePath -> m FilePath
forall b c a. (b -> c) -> (a -> b) -> a -> c
.) ((FilePath -> Sh FilePath) -> FilePath -> m FilePath)
-> (FilePath -> FilePath -> Sh FilePath)
-> FilePath
-> FilePath
-> m FilePath
forall b c a. (b -> c) -> (a -> b) -> a -> c
. FilePath -> FilePath -> Sh FilePath
S.relativeTo
canonic :: MonadSh m => FilePath -> m FilePath
canonic :: forall (m :: * -> *). MonadSh m => FilePath -> m FilePath
canonic = Sh FilePath -> m FilePath
forall a. Sh a -> m a
forall (m :: * -> *) a. MonadSh m => Sh a -> m a
liftSh (Sh FilePath -> m FilePath)
-> (FilePath -> Sh FilePath) -> FilePath -> m FilePath
forall b c a. (b -> c) -> (a -> b) -> a -> c
. FilePath -> Sh FilePath
forall (m :: * -> *). MonadSh m => FilePath -> m FilePath
canonic
canonicalize :: MonadSh m => FilePath -> m FilePath
canonicalize :: forall (m :: * -> *). MonadSh m => FilePath -> m FilePath
canonicalize = Sh FilePath -> m FilePath
forall a. Sh a -> m a
forall (m :: * -> *) a. MonadSh m => Sh a -> m a
liftSh (Sh FilePath -> m FilePath)
-> (FilePath -> Sh FilePath) -> FilePath -> m FilePath
forall b c a. (b -> c) -> (a -> b) -> a -> c
. FilePath -> Sh FilePath
S.canonicalize
absPath :: MonadSh m => FilePath -> m FilePath
absPath :: forall (m :: * -> *). MonadSh m => FilePath -> m FilePath
absPath = Sh FilePath -> m FilePath
forall a. Sh a -> m a
forall (m :: * -> *) a. MonadSh m => Sh a -> m a
liftSh (Sh FilePath -> m FilePath)
-> (FilePath -> Sh FilePath) -> FilePath -> m FilePath
forall b c a. (b -> c) -> (a -> b) -> a -> c
. FilePath -> Sh FilePath
S.absPath
test_d :: MonadSh m => FilePath -> m Bool
test_d :: forall (m :: * -> *). MonadSh m => FilePath -> m Bool
test_d = Sh Bool -> m Bool
forall a. Sh a -> m a
forall (m :: * -> *) a. MonadSh m => Sh a -> m a
liftSh (Sh Bool -> m Bool) -> (FilePath -> Sh Bool) -> FilePath -> m Bool
forall b c a. (b -> c) -> (a -> b) -> a -> c
. FilePath -> Sh Bool
S.test_d
test_s :: MonadSh m => FilePath -> m Bool
test_s :: forall (m :: * -> *). MonadSh m => FilePath -> m Bool
test_s = Sh Bool -> m Bool
forall a. Sh a -> m a
forall (m :: * -> *) a. MonadSh m => Sh a -> m a
liftSh (Sh Bool -> m Bool) -> (FilePath -> Sh Bool) -> FilePath -> m Bool
forall b c a. (b -> c) -> (a -> b) -> a -> c
. FilePath -> Sh Bool
S.test_s
ls :: MonadSh m => FilePath -> m [FilePath]
ls :: forall (m :: * -> *). MonadSh m => FilePath -> m [FilePath]
ls = Sh [FilePath] -> m [FilePath]
forall a. Sh a -> m a
forall (m :: * -> *) a. MonadSh m => Sh a -> m a
liftSh (Sh [FilePath] -> m [FilePath])
-> (FilePath -> Sh [FilePath]) -> FilePath -> m [FilePath]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. FilePath -> Sh [FilePath]
S.ls
inspect :: (Show s, MonadSh m) => s -> m ()
inspect :: forall s (m :: * -> *). (Show s, MonadSh m) => s -> m ()
inspect = Sh () -> m ()
forall a. Sh a -> m a
forall (m :: * -> *) a. MonadSh m => Sh a -> m a
liftSh (Sh () -> m ()) -> (s -> Sh ()) -> s -> m ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. s -> Sh ()
forall s. Show s => s -> Sh ()
S.inspect
inspect_err :: (Show s, MonadSh m) => s -> m ()
inspect_err :: forall s (m :: * -> *). (Show s, MonadSh m) => s -> m ()
inspect_err = Sh () -> m ()
forall a. Sh a -> m a
forall (m :: * -> *) a. MonadSh m => Sh a -> m a
liftSh (Sh () -> m ()) -> (s -> Sh ()) -> s -> m ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. s -> Sh ()
forall s. Show s => s -> Sh ()
S.inspect_err
catchany :: MonadBaseControl IO m => m a -> (SomeException -> m a) -> m a
catchany :: forall (m :: * -> *) a.
MonadBaseControl IO m =>
m a -> (SomeException -> m a) -> m a
catchany = m a -> (SomeException -> m a) -> m a
forall (m :: * -> *) e a.
(MonadBaseControl IO m, Exception e) =>
m a -> (e -> m a) -> m a
Control.Exception.Lifted.catch