-- Hoogle documentation, generated by Haddock
-- See Hoogle, http://www.haskell.org/hoogle/
-- | Re-export of Shake using well-typed paths and ReaderT.
--
-- Re-export of Shake using well-typed paths and ReaderT. This is an
-- early release so some things may be missing or broken but so far the
-- conveniences have been worth it.
@package shake-plus
@version 0.0.2.0
module Development.Shake.Plus.Core
-- | Monads in which Actions may be embedded.
class Monad m => MonadAction m
liftAction :: MonadAction m => Action a -> m a
class Monad m => MonadRules m
liftRules :: MonadRules m => Rules a -> m a
newtype UnliftAction m
UnliftAction :: (forall a. m a -> Action a) -> UnliftAction m
[unliftAction] :: UnliftAction m -> forall a. m a -> Action a
-- | Monads which allow their actions to be run in Action.
--
-- For the same reasons as MonadUnliftIO this is limited to
-- ReaderT and IdentityT transformers on top of
-- Action.
class MonadAction m => MonadUnliftAction m
withRunInAction :: MonadUnliftAction m => ((forall a. m a -> Action a) -> Action b) -> m b
withUnliftAction :: MonadUnliftAction m => (UnliftAction m -> Action a) -> m a
askUnliftAction :: MonadUnliftAction m => m (UnliftAction m)
toAction :: MonadUnliftAction m => m a -> m (Action a)
-- | Concrete Action runner, hardcoded to `ReaderT r Action a`.
data RAction r a
-- | Concrete Rules collector, hardcoded to `ReaderT r Rules a`.
data ShakePlus r a
-- | Run an RAction with an environment, consuming it for a result.
runRAction :: MonadAction m => env -> RAction env a -> m a
-- | Run a ShakePlus with an environment, consuming it for some
-- Shake Rules.
runShakePlus :: MonadRules m => env -> ShakePlus env a -> m a
-- | The Action monad, use liftIO to raise IO actions
-- into it, and need to execute files. Action values are used by
-- addUserRule and action. The Action monad
-- tracks the dependencies of a rule. To raise an exception call
-- error, MonadFail or liftIO .
-- throwIO.
data Action a
-- | Define a set of rules. Rules can be created with calls to functions
-- such as %> or action. Rules are combined with either
-- the Monoid instance, or (more commonly) the Monad
-- instance and do notation. To define your own custom types of
-- rule, see Development.Shake.Rule.
data Rules a
-- | A type synonym for file patterns, containing // and
-- *. For the syntax and semantics of FilePattern see
-- ?==.
--
-- Most normaliseExd FilePath values are suitable as
-- FilePattern values which match only that specific file. On
-- Windows \ is treated as equivalent to /.
--
-- You can write FilePattern values as a literal string, or build
-- them up using the operators <.>, </> and
-- <//>. However, beware that:
--
--
-- - On Windows, use <.> from
-- Development.Shake.FilePath instead of from
-- System.FilePath - otherwise "//*" <.> exe
-- results in "//*\\.exe".
-- - If the second argument of </> has a leading path
-- separator (namely /) then the second argument will be
-- returned.
--
type FilePattern = String
-- | Main entry point for running Shake build systems. For an example see
-- the top of the module Development.Shake. Use
-- ShakeOptions to specify how the system runs, and Rules
-- to specify what to build. The function will throw an exception if the
-- build fails.
--
-- To use command line flags to modify ShakeOptions see
-- shakeArgs.
shake :: ShakeOptions -> Rules () -> IO ()
-- | The default set of ShakeOptions.
shakeOptions :: ShakeOptions
instance Development.Shake.Plus.Core.MonadRules (Development.Shake.Plus.Core.ShakePlus r)
instance Control.Monad.IO.Class.MonadIO (Development.Shake.Plus.Core.ShakePlus r)
instance Control.Monad.Reader.Class.MonadReader r (Development.Shake.Plus.Core.ShakePlus r)
instance GHC.Base.Monad (Development.Shake.Plus.Core.ShakePlus r)
instance GHC.Base.Applicative (Development.Shake.Plus.Core.ShakePlus r)
instance GHC.Base.Functor (Development.Shake.Plus.Core.ShakePlus r)
instance Development.Shake.Plus.Core.MonadUnliftAction (Development.Shake.Plus.Core.RAction r)
instance Development.Shake.Plus.Core.MonadAction (Development.Shake.Plus.Core.RAction r)
instance Control.Monad.IO.Class.MonadIO (Development.Shake.Plus.Core.RAction r)
instance Control.Monad.Reader.Class.MonadReader r (Development.Shake.Plus.Core.RAction r)
instance GHC.Base.Monad (Development.Shake.Plus.Core.RAction r)
instance GHC.Base.Applicative (Development.Shake.Plus.Core.RAction r)
instance GHC.Base.Functor (Development.Shake.Plus.Core.RAction r)
instance Control.Monad.Catch.MonadThrow (Development.Shake.Plus.Core.ShakePlus r)
instance Control.Monad.Catch.MonadThrow (Development.Shake.Plus.Core.RAction r)
instance Development.Shake.Plus.Core.MonadRules Development.Shake.Internal.Core.Rules.Rules
instance Development.Shake.Plus.Core.MonadRules m => Development.Shake.Plus.Core.MonadRules (Control.Monad.Trans.Reader.ReaderT r m)
instance Development.Shake.Plus.Core.MonadUnliftAction Development.Shake.Internal.Core.Types.Action
instance Development.Shake.Plus.Core.MonadUnliftAction m => Development.Shake.Plus.Core.MonadUnliftAction (Control.Monad.Trans.Reader.ReaderT r m)
instance Development.Shake.Plus.Core.MonadAction Development.Shake.Internal.Core.Types.Action
instance Development.Shake.Plus.Core.MonadAction m => Development.Shake.Plus.Core.MonadAction (Control.Monad.Trans.Reader.ReaderT r m)
module Development.Shake.Plus.Config
-- | Lifted readConfigFile with well-typed path.
readConfigFile :: MonadIO m => Path a File -> m (HashMap String String)
-- | Lifted readConfigFileWithEnv with well-typed path.
readConfigFileWithEnv :: MonadIO m => [(String, String)] -> Path a File -> m (HashMap String String)
-- | Lifted usingConfigFile with well-typed path.
usingConfigFile :: MonadRules m => Path a File -> m ()
-- | Lifted usingConfig.
usingConfig :: MonadRules m => HashMap String String -> m ()
-- | Lifted getConfig.
getConfig :: MonadAction m => String -> m (Maybe String)
-- | Lifted getConfigKeys.
getConfigKeys :: MonadAction m => m [String]
module Development.Shake.Plus.Cache
-- | Lifted version of newCache using RAction.
newCache :: (MonadRules m, MonadReader r m, Eq k, Hashable k) => (k -> RAction r v) -> m (k -> RAction r v)
-- | Lifted version of newCacheIO using RAction.
newCacheIO :: (MonadIO m, MonadReader r m, Eq k, Hashable k) => (k -> RAction r v) -> m (k -> RAction r v)
module Development.Shake.Plus.Database
-- | The type of an open Shake database. Created with
-- shakeOpenDatabase or shakeWithDatabase. Used with
-- shakeRunDatabase. You may not execute simultaneous calls using
-- ShakeDatabase on separate threads (it will raise an error).
data ShakeDatabase
-- | Lifted shakeOpenDatabase
shakeOpenDatabase :: MonadIO m => ShakeOptions -> Rules () -> m (IO ShakeDatabase, IO ())
-- | Unlifted shakeWithDatabase
shakeWithDatabase :: MonadUnliftIO m => ShakeOptions -> Rules () -> (ShakeDatabase -> m a) -> m a
-- | Lifted shakeOneShotDatabase
shakeOneShotDatabase :: MonadIO m => ShakeDatabase -> m ()
-- | Lifted shakeRunDatabase
shakeRunDatabase :: MonadIO m => ShakeDatabase -> [Action a] -> m ([a], [IO ()])
-- | Lifted shakeLiveFilesDatabase
shakeLiveFilesDatabase :: MonadIO m => ShakeDatabase -> m [FilePath]
-- | Lifted shakeProfileDatabase with well-typed path.
shakeProfileDatabase :: MonadIO m => ShakeDatabase -> Path a File -> m ()
-- | Lifted shakeErrorsDatabase
shakeErrorsDatabase :: MonadIO m => ShakeDatabase -> m [(String, SomeException)]
-- | Unlifted shakeRunAfter
shakeRunAfter :: MonadUnliftIO m => ShakeOptions -> [m ()] -> m ()
module Development.Shake.Plus.Directory
-- | Lifted version of doesFileExist using well-typed Paths.
doesFileExist :: MonadAction m => Path b File -> m Bool
-- | Lifted version of doesDirectoryExist using well-typed
-- Paths.
doesDirectoryExist :: MonadAction m => Path b Dir -> m Bool
-- | Lifted version of getDirectoryFiles using well-typed
-- Paths.
getDirectoryFiles :: MonadAction m => Path b Dir -> [FilePattern] -> m [Path Rel File]
-- | Like getDirectoryFiles, but returns Within values.
getDirectoryFilesWithin :: MonadAction m => Path Rel Dir -> [FilePattern] -> m [Within Rel File]
-- | Lifted version of getDirectoryDirs using well-typed
-- Paths.
getDirectoryDirs :: MonadAction m => Path b Dir -> m [Path Rel Dir]
-- | Lifted version of getDirectoryFilesIO using well-typed
-- Paths.
getDirectoryFilesIO :: MonadIO m => Path b Dir -> [FilePattern] -> m [Path Rel File]
module Development.Shake.Plus.File
-- | Lifted version of copyFile with well-typed Paths.
copyFile' :: (MonadAction m, Partial) => Path Rel File -> Path Rel File -> m ()
-- | Lifted version of copyFileChanged' with well-typed
-- Paths.
copyFileChanged :: (MonadAction m, Partial) => Path Rel File -> Path Rel File -> m ()
-- | Lifted version of readFile' with well-typed Path.
readFile' :: (MonadAction m, Partial) => Path Rel File -> m Text
-- | Lifted version of readFileLines with well-typed Path.
readFileLines :: (MonadAction m, Partial) => Path Rel File -> m [Text]
-- | Like readFile', but with an argument for the parent directory.
-- Used for symmetry with the way getDirectoryFiles takes
-- arguments.
readFileIn' :: MonadAction m => Path Rel Dir -> Path Rel File -> m Text
-- | Like readFile', but accepts a Within value.
readFileWithin :: MonadAction m => Within Rel File -> m Text
-- | Lifted version of writeFile with well-typed Path.
writeFile' :: (MonadAction m, Partial) => Path Rel File -> Text -> m ()
-- | Lifted version of writeFileLines with well-typed Path.
writeFileLines :: (MonadAction m, Partial) => Path Rel File -> [Text] -> m ()
-- | Like writeFile', but with an argument for the parent directory.
-- Used for symmetry with the way getDirectoryFiles takes
-- arguments.
writeFileIn' :: MonadAction m => Path Rel Dir -> Path Rel File -> Text -> m ()
-- | Like writeFile', but accepts a Within value.
writeFileWithin :: MonadAction m => Within Rel File -> Text -> m ()
-- | Lifted version of writeFileChanged with well-typed Path.
writeFileChanged :: (MonadAction m, Partial) => Path b File -> Text -> m ()
-- | Like writeFileChanged', but with an argument for the parent
-- directory. Used for symmetry with the way getDirectoryFiles
-- takes arguments.
writeFileChangedIn :: MonadAction m => Path Rel Dir -> Path Rel File -> Text -> m ()
-- | Like writeFileChanged', but accepts a Within value.
writeFileChangedWithin :: MonadAction m => Within Rel File -> Text -> m ()
-- | Lifted version of removeFiles with well-typed Path.
removeFiles :: MonadAction m => Path b File -> [FilePattern] -> m ()
-- | Lifted version of removeFilesAfter with well-typed Path.
removeFilesAfter :: MonadAction m => Path Rel Dir -> [FilePattern] -> m ()
module Development.Shake.Plus.FileRules
-- | Lifted version of need, This still uses Strings because
-- it may refer to a phony rule. For the Path specific version use
-- needP
need :: MonadAction m => [String] -> m ()
-- | Lifted version of want. This still uses Strings because
-- it may refer to a phony rule. For the Path specific version use
-- wantP.
want :: MonadRules m => [String] -> m ()
-- | Lifted version of need using well-typed Paths
needP :: (MonadAction m, Partial) => [Path Rel File] -> m ()
-- | Lifted version of want using well-typed Paths
wantP :: MonadRules m => [Path Rel File] -> m ()
-- | Like needP, but accepts Paths relative to the first
-- argument.
needIn :: MonadAction m => Path Rel Dir -> [Path Rel File] -> m ()
-- | Like wantP, but accepts Paths relative to the first
-- argument.
wantIn :: MonadRules m => Path Rel Dir -> [Path Rel File] -> m ()
-- | Like needP, but accepts Within values.
needWithin :: MonadAction m => [Within Rel File] -> m ()
-- | Like wantP, but accepts Within values.
wantWithin :: MonadRules m => [Within Rel File] -> m ()
-- | Lifted version of %> using well-typed Paths
(%>) :: (Partial, MonadReader r m, MonadRules m) => FilePattern -> (Path Rel File -> RAction r ()) -> m ()
-- | Lifted version of |%> using well-typed Paths
(|%>) :: (Partial, MonadReader r m, MonadRules m) => [FilePattern] -> (Path Rel File -> RAction r ()) -> m ()
-- | Lifted version of phony using well-typed Paths and
-- RAction
phony :: (MonadReader r m, MonadRules m) => String -> RAction r () -> m ()
module Development.Shake.Plus.Loaders
-- | Batch loading function. Loads all items detected by the filtepattern
-- and provides parameters for sorting, filtering and a simple
-- transformation via an endofunction. Returns a list of values indexed
-- by their source Path.
loadSortFilterApply :: (MonadAction m, Ord b) => (Path Rel File -> m a) -> Path Rel Dir -> [FilePattern] -> (a -> b) -> (a -> Bool) -> (a -> a) -> m [(Path Rel File, a)]
-- | Like loadSortFilterApply, but returns Within values.
loadSortFilterApplyW :: (MonadAction m, Ord b) => (Within Rel File -> m a) -> Path Rel Dir -> [FilePattern] -> (a -> b) -> (a -> Bool) -> (a -> a) -> m [(Within Rel File, a)]
module Development.Shake.Plus.Oracle
-- | Lifted version of addOracle using RAction runner.
addOracle :: (MonadRules m, MonadReader r m, RuleResult q ~ a, ShakeValue q, ShakeValue a, Partial) => (q -> RAction r a) -> m (q -> RAction r a)
-- | Lifted version of addOracleCache using RAction runner.
addOracleCache :: (MonadRules m, MonadReader r m, RuleResult q ~ a, ShakeValue q, ShakeValue a, Partial) => (q -> RAction r a) -> m (q -> RAction r a)
-- | Lifted version of addOracleHash using RAction runner.
addOracleHash :: (MonadRules m, MonadReader r m, RuleResult q ~ a, ShakeValue q, ShakeValue a, Partial) => (q -> RAction r a) -> m (q -> RAction r a)
-- | Lifted version of askOracle.
askOracle :: (MonadAction m, RuleResult q ~ a, ShakeValue q, ShakeValue a) => q -> m a
-- | Lifted version of askOracles.
askOracles :: (MonadAction m, RuleResult q ~ a, ShakeValue q, ShakeValue a) => [q] -> m [a]
module Development.Shake.Plus
module Development.Shake.Plus.Env
-- | Lifted version of getEnv
getEnv :: MonadAction m => String -> m (Maybe String)
-- | Lifted version of getEnvWithDefault
getEnvWithDefault :: MonadAction m => String -> String -> m String
-- | Lifted version of getEnvError
getEnvError :: (Partial, MonadAction m) => String -> m String
module Development.Shake.Plus.Temp
-- | Unlifted version of withTempFile with well-typed Path.
withTempFile :: (MonadUnliftAction m, MonadThrow m) => (Path Rel File -> m a) -> m a
-- | Unlifted version of withTempFile with well-typed Path.
withTempDir :: (MonadUnliftAction m, MonadThrow m) => (Path Rel Dir -> m a) -> m a
-- | Unlifted version of withTempFileWithin with well-typed
-- Paths.
withTempFileWithin :: (MonadUnliftAction m, MonadThrow m) => Path b Dir -> (Path Rel File -> m a) -> m a
-- | Unlifted version of withTempDirWithin with well-typed
-- Paths.
withTempDirWithin :: (MonadUnliftAction m, MonadThrow m) => Path b Dir -> (Path Rel Dir -> m a) -> m a