module Development.Shake.Plus.FileRules (
need
, want
, needP
, wantP
, needIn
, wantIn
, needWithin
, wantWithin
, (%>)
, (|%>)
, (%^>)
, (|%^>)
, phony
) where
import Control.Comonad.Env as E
import Control.Exception.Extra
import qualified Development.Shake
import qualified Development.Shake.FilePath
import Development.Shake.Plus.Core
import Path
import Path.Like
import RIO as R
import Within
need :: (Partial, MonadAction m, Foldable t) => t String -> m ()
need = liftAction . Development.Shake.need . toList
want :: (Partial, MonadRules m, Foldable t) => t String -> m ()
want = liftRules . Development.Shake.want . toList
needP :: (Partial, MonadAction m, Traversable t, FileLike b a) => t a -> m ()
needP = need . fmap (toFilePath . toFile)
wantP :: (Partial, MonadRules m, Traversable t, FileLike b a) => t a -> m ()
wantP = want . fmap (toFilePath . toFile)
needIn :: (Partial, MonadAction m, Traversable t, DirLike Rel d, FileLike Rel a) => d -> t a -> m ()
needIn x = needP . fmap (x />)
wantIn :: (Partial, MonadRules m, Traversable t, DirLike Rel d, FileLike Rel a) => d -> t a -> m ()
wantIn x = wantP . fmap (x />)
needWithin :: (Partial, MonadAction m, Traversable t, FileLike Rel a) => Within Rel (t a) -> m ()
needWithin x = needIn (E.ask x) (extract x)
wantWithin :: (Partial, MonadRules m, Traversable t, FileLike Rel a) => Within Rel (t a) -> m ()
wantWithin x = wantIn (E.ask x) (extract x)
(%>) :: (Partial, MonadReader r m, MonadRules m) => FilePattern -> (Path Rel File -> RAction r ()) -> m ()
(%>) x ract = R.ask >>= \r -> liftRules $ x Development.Shake.%> (runRAction r . (ract <=< parseRelFile))
(|%>) :: (Partial, MonadReader r m, MonadRules m) => [FilePattern] -> (Path Rel File -> RAction r ()) -> m ()
(|%>) x ract = R.ask >>= \r -> liftRules $ x Development.Shake.|%> (runRAction r . (ract <=< parseRelFile))
(%^>) :: (Partial, MonadReader r m, MonadRules m) => Within Rel FilePattern -> (Within Rel (Path Rel File) -> RAction r ()) -> m ()
(%^>) xs ract = liftA2 (Development.Shake.FilePath.</>) (toFilePath . E.ask) extract xs %> (ract <=< (`asWithin` E.ask xs))
(|%^>) :: (Partial, MonadReader r m, MonadRules m) => Within Rel [FilePattern] -> (Within Rel (Path Rel File) -> RAction r ()) -> m ()
(|%^>) xs ract = ((Development.Shake.FilePath.</>) (toFilePath . E.ask $ xs) <$> extract xs) |%> (ract <=< (`asWithin` E.ask xs))
phony :: (MonadReader r m, MonadRules m) => String -> RAction r () -> m ()
phony x ract = R.ask >>= \r -> liftRules $ Development.Shake.phony x $ runRAction r ract