module Development.Shake.Plus.Forward (
shakeForward
, shakeArgsForward
, Development.Shake.Forward.forwardOptions
, forwardRule
, cache
, cacheAction
, cacheActionWith
) where
import Development.Shake.Classes
import qualified Development.Shake.Forward
import Development.Shake.Plus.Command
import Development.Shake.Plus.Core
import RIO
shakeForward :: MonadIO m => ShakeOptions -> r -> RAction r () -> m ()
shakeForward :: ShakeOptions -> r -> RAction r () -> m ()
shakeForward ShakeOptions
opts r
env RAction r ()
ract = IO () -> m ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> m ()) -> IO () -> m ()
forall a b. (a -> b) -> a -> b
$ ShakeOptions -> Action () -> IO ()
Development.Shake.Forward.shakeForward ShakeOptions
opts (r -> RAction r () -> Action ()
forall (m :: * -> *) env a.
MonadAction m =>
env -> RAction env a -> m a
runRAction r
env RAction r ()
ract)
shakeArgsForward :: MonadIO m => ShakeOptions -> r -> RAction r () -> m ()
shakeArgsForward :: ShakeOptions -> r -> RAction r () -> m ()
shakeArgsForward ShakeOptions
opts r
env RAction r ()
ract = IO () -> m ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> m ()) -> IO () -> m ()
forall a b. (a -> b) -> a -> b
$ ShakeOptions -> Action () -> IO ()
Development.Shake.Forward.shakeArgsForward ShakeOptions
opts (r -> RAction r () -> Action ()
forall (m :: * -> *) env a.
MonadAction m =>
env -> RAction env a -> m a
runRAction r
env RAction r ()
ract)
forwardRule :: (MonadReader r m, MonadRules m) => RAction r () -> m ()
forwardRule :: RAction r () -> m ()
forwardRule RAction r ()
ract = m r
forall r (m :: * -> *). MonadReader r m => m r
ask m r -> (r -> m ()) -> m ()
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= \r
r -> Rules () -> m ()
forall (m :: * -> *) a. MonadRules m => Rules a -> m a
liftRules (Rules () -> m ()) -> Rules () -> m ()
forall a b. (a -> b) -> a -> b
$ Action () -> Rules ()
Development.Shake.Forward.forwardRule (r -> RAction r () -> Action ()
forall (m :: * -> *) env a.
MonadAction m =>
env -> RAction env a -> m a
runRAction r
r RAction r ()
ract)
cache :: MonadAction m => (forall r. CmdArguments r => r) -> m ()
cache :: (forall r. CmdArguments r => r) -> m ()
cache = \forall r. CmdArguments r => r
c -> Action () -> m ()
forall (m :: * -> *) a. MonadAction m => Action a -> m a
liftAction Action ()
forall r. CmdArguments r => r
c
cacheAction :: (MonadUnliftAction m, Typeable a, Binary a, Show a, Typeable b, Binary b, Show b) => a -> m b -> m b
cacheAction :: a -> m b -> m b
cacheAction a
x m b
a = ((forall a. m a -> Action a) -> Action b) -> m b
forall (m :: * -> *) b.
MonadUnliftAction m =>
((forall a. m a -> Action a) -> Action b) -> m b
withRunInAction (((forall a. m a -> Action a) -> Action b) -> m b)
-> ((forall a. m a -> Action a) -> Action b) -> m b
forall a b. (a -> b) -> a -> b
$ \forall a. m a -> Action a
run -> a -> Action b -> Action b
forall a b.
(Typeable a, Binary a, Show a, Typeable b, Binary b, Show b) =>
a -> Action b -> Action b
Development.Shake.Forward.cacheAction a
x (m b -> Action b
forall a. m a -> Action a
run m b
a)
cacheActionWith :: (MonadUnliftAction m, Typeable a, Binary a, Show a, Typeable b, Binary b, Show b, Typeable c, Binary c, Show c) => a -> b -> m c -> m c
cacheActionWith :: a -> b -> m c -> m c
cacheActionWith a
a b
b m c
m = ((forall a. m a -> Action a) -> Action c) -> m c
forall (m :: * -> *) b.
MonadUnliftAction m =>
((forall a. m a -> Action a) -> Action b) -> m b
withRunInAction (((forall a. m a -> Action a) -> Action c) -> m c)
-> ((forall a. m a -> Action a) -> Action c) -> m c
forall a b. (a -> b) -> a -> b
$ \forall a. m a -> Action a
run -> a -> b -> Action c -> Action c
forall a b c.
(Typeable a, Binary a, Show a, Typeable b, Binary b, Show b,
Typeable c, Binary c, Show c) =>
a -> b -> Action c -> Action c
Development.Shake.Forward.cacheActionWith a
a b
b (m c -> Action c
forall a. m a -> Action a
run m c
m)