-- Hoogle documentation, generated by Haddock -- See Hoogle, http://www.haskell.org/hoogle/ -- | Third cake the Makefile EDSL -- -- Cake3 is a EDSL for building Makefiles, written in Haskell. With -- cake3, developer can write their build logic in Haskell, obtain clean -- and safe Makefile and distribute it among the non-Haskell-aware users. -- Currenly, GNU Make is the only backend supported. -- -- Example program -- --
-- module Cakefile where -- -- import Development.Cake3 -- import Cakefile_P -- -- cs = map file ["main.c", "second.c"] -- -- main = writeMake (file "Makefile") $ do -- selfUpdate -- d <- rule $ do -- shell [cmd|gcc -M $cs -MF @(file "depend.mk")|] -- os <- forM cs $ \c -> do -- rule $ do -- shell [cmd| gcc -c $(extvar "CFLAGS") -o @(c.="o") $c |] -- elf <- rule $ do -- shell [cmd| gcc -o @(file "main.elf") $os |] -- rule $ do -- phony "all" -- depend elf -- includeMakefile d ---- -- Basic workflow -- --
-- rule $ do -- phony "clean" -- unsafeShell [cmd|rm $elf $os $d|] --phony :: (Monad m) => String -> A' m () -- | Mark the recipe as INTERMEDIATE i.e. claim that all it's -- targets may be removed after the build process. Makefile-specific. markIntermediate :: (Monad m) => A' m () -- | Obtain the contents of a File. Note, that this generally means, that -- Makefile should be regenerated each time the File is changed. readFileForMake :: (MonadMake m) => File -> m ByteString -- | CommandGen is a recipe-builder packed in the newtype to prevent -- partial expansion of it's commands newtype CommandGen' m CommandGen' :: A' m Command -> CommandGen' m [unCommand] :: CommandGen' m -> A' m Command type CommandGen = CommandGen' (Make' IO) -- | Pack the command builder into a CommandGen commandGen :: A Command -> CommandGen -- | Modifie the recipe builder: ignore all the dependencies ignoreDepends :: (Monad m) => A' m a -> A' m a -- | Apply the recipe builder to the current recipe state. Return the list -- of targets of the current Recipe under construction shell :: (Monad m) => CommandGen' m -> A' m [File] -- | Version of @shell returning a single file shell1 :: (Monad m) => CommandGen' m -> A' m File -- | Version of shell which doesn't track it's dependencies unsafeShell :: (Monad m) => CommandGen' m -> A' m [File] -- | Simple wrapper for strings, a target for various typeclass instances. newtype CakeString CakeString :: String -> CakeString -- | An alias to CakeString constructor string :: String -> CakeString -- | Class of things which may be referenced using '@(expr)' syntax of the -- quasi-quoted shell expressions. class (Monad m) => RefOutput m x refOutput :: RefOutput m x => x -> A' m Command inbetween :: (Foldable t, Monad m) => a -> m (t [a]) -> m [a] spacify :: (Monad m, Foldable t) => m (t [CommandPiece]) -> m [CommandPiece] -- | Class of things which may be referenced using '$(expr)' syntax of the -- quasy-quoted shell expressions class (Monad a) => RefInput a x -- | Register the input item, return it's shell-script representation refInput :: RefInput a x => x -> a Command -- | Add it's argument to the list of dependencies (prerequsites) of a -- current recipe under construction depend :: (RefInput a x) => x -> a () -- | Declare that current recipe produces item x. produce :: (RefOutput m x) => x -> A' m () -- | Add variables vs to tracking list of the current recipe variables :: (Foldable t, Monad m) => (t Variable) -> A' m () -- | Add tools ts to the tracking list of the current recipe tools :: (Foldable t, Monad m) => (t Tool) -> A' m () -- | Add commands to the list of commands of a current recipe under -- construction. Warning: this function behaves like unsafeShell i.e. it -- doesn't analyze the command text commands :: (Monad m) => [Command] -> A' m () -- | Set the recipe's location in the Cakefile.hs location :: (Monad m) => String -> A' m () -- | Set additional flags flags :: (Monad m) => Set Flag -> A' m () -- | Has effect of a function QQ -> CommandGen where QQ is a -- string supporting the following syntax: -- --
-- [cmd|gcc $flags -o @file|] ---- -- is equivalent to -- --
-- return $ CommandGen $ do -- s1 <- refInput "gcc " -- s2 <- refInput (flags :: Variable) -- s3 <- refInput " -o " -- s4 <- refOutput (file :: File) -- return (s1 ++ s2 ++ s3 ++ s4) ---- -- Later, this command may be examined or passed to the shell function to -- apply it to the recipe cmd :: QuasiQuoter instance GHC.Classes.Ord Development.Cake3.Monad.CakeString instance GHC.Classes.Eq Development.Cake3.Monad.CakeString instance GHC.Show.Show Development.Cake3.Monad.CakeString instance Control.Monad.Fix.MonadFix m => Control.Monad.Fix.MonadFix (Development.Cake3.Monad.A' m) instance Control.Monad.IO.Class.MonadIO m => Control.Monad.IO.Class.MonadIO (Development.Cake3.Monad.A' m) instance GHC.Base.Monad m => Control.Monad.State.Class.MonadState Development.Cake3.Types.Recipe (Development.Cake3.Monad.A' m) instance GHC.Base.Monad m => GHC.Base.Applicative (Development.Cake3.Monad.A' m) instance GHC.Base.Functor m => GHC.Base.Functor (Development.Cake3.Monad.A' m) instance GHC.Base.Monad m => GHC.Base.Monad (Development.Cake3.Monad.A' m) instance Control.Monad.Fix.MonadFix m => Control.Monad.Fix.MonadFix (Development.Cake3.Monad.Make' m) instance Control.Monad.IO.Class.MonadIO m => Control.Monad.IO.Class.MonadIO (Development.Cake3.Monad.Make' m) instance GHC.Base.Monad m => Control.Monad.State.Class.MonadState Development.Cake3.Monad.MakeState (Development.Cake3.Monad.Make' m) instance GHC.Base.Monad m => GHC.Base.Applicative (Development.Cake3.Monad.Make' m) instance GHC.Base.Functor m => GHC.Base.Functor (Development.Cake3.Monad.Make' m) instance GHC.Base.Monad m => GHC.Base.Monad (Development.Cake3.Monad.Make' m) instance Development.Cake3.Monad.MonadMake (Development.Cake3.Monad.Make' GHC.Types.IO) instance Development.Cake3.Monad.MonadMake m => Development.Cake3.Monad.MonadMake (Development.Cake3.Monad.A' m) instance Development.Cake3.Monad.MonadMake m => Development.Cake3.Monad.MonadMake (Control.Monad.Trans.State.Lazy.StateT s m) instance GHC.Base.Monad m => Control.Monad.Loc.MonadLoc (Development.Cake3.Monad.Make' m) instance GHC.Base.Monad m => Development.Cake3.Monad.RefOutput m Development.Cake3.Types.File instance GHC.Base.Monad m => Development.Cake3.Monad.RefOutput m [Development.Cake3.Types.File] instance GHC.Base.Monad m => Development.Cake3.Monad.RefOutput m (Data.Set.Base.Set Development.Cake3.Types.File) instance Development.Cake3.Monad.RefOutput m x => Development.Cake3.Monad.RefOutput m (GHC.Base.Maybe x) instance Development.Cake3.Monad.RefOutput m Development.Cake3.Types.File => Development.Cake3.Monad.RefOutput m (m Development.Cake3.Types.File) instance GHC.Base.Monad m => Development.Cake3.Monad.RefInput (Development.Cake3.Monad.A' m) Development.Cake3.Types.File instance (Development.Cake3.Monad.RefInput a x, Development.Cake3.Monad.MonadMake a) => Development.Cake3.Monad.RefInput a (Development.Cake3.Monad.Make x) instance GHC.Base.Monad m => Development.Cake3.Monad.RefInput (Development.Cake3.Monad.A' m) Development.Cake3.Types.Recipe instance Development.Cake3.Monad.RefInput a x => Development.Cake3.Monad.RefInput a [x] instance Development.Cake3.Monad.RefInput a x => Development.Cake3.Monad.RefInput a (Data.Set.Base.Set x) instance (Control.Monad.IO.Class.MonadIO a, Development.Cake3.Monad.RefInput a x) => Development.Cake3.Monad.RefInput a (GHC.Types.IO x) instance Development.Cake3.Monad.RefInput a x => Development.Cake3.Monad.RefInput a (GHC.Base.Maybe x) instance GHC.Base.Monad m => Development.Cake3.Monad.RefInput (Development.Cake3.Monad.A' m) Development.Cake3.Types.Variable instance GHC.Base.Monad m => Development.Cake3.Monad.RefInput (Development.Cake3.Monad.A' m) Development.Cake3.Types.Tool instance GHC.Base.Monad m => Development.Cake3.Monad.RefInput (Development.Cake3.Monad.A' m) Development.Cake3.Monad.CakeString instance GHC.Base.Monad m => Development.Cake3.Monad.RefInput (Development.Cake3.Monad.A' m) (Development.Cake3.Monad.CommandGen' m) module Development.Cake3.Writer -- | Default Makefile location defaultMakefile :: File -- | Render the Makefile. Return either the content (Right), or error -- messages (Left). buildMake :: MakeState -> Either String String instance GHC.Base.Applicative Development.Cake3.Writer.MakeLL instance Control.Monad.State.Class.MonadState ([Development.Cake3.Types.File], Data.Set.Base.Set Development.Cake3.Types.Recipe) Development.Cake3.Writer.MakeLL instance GHC.Base.Monad Development.Cake3.Writer.MakeLL instance GHC.Base.Functor Development.Cake3.Writer.MakeLL instance Development.Cake3.Writer.ToMakeText [GHC.Types.Char] instance Development.Cake3.Writer.ToMakeText Development.Cake3.Types.File instance Development.Cake3.Writer.ToMakeText Development.Cake3.Types.Command instance Development.Cake3.Writer.ToMakeText Development.Cake3.Types.CommandPiece instance Development.Cake3.Writer.ToMakeText (Data.Set.Base.Set Development.Cake3.Types.File) module Development.Cake3.Ext.UrEmbed.Types data Args A :: Bool -> FilePath -> FilePath -> FilePath -> FilePath -> FilePath -> Bool -> FilePath -> Args [bver] :: Args -> Bool [out_c] :: Args -> FilePath [out_h] :: Args -> FilePath [out_urs] :: Args -> FilePath [out_wrapper] :: Args -> FilePath [out_ffi_js] :: Args -> FilePath [mangle_css_url] :: Args -> Bool [inp] :: Args -> FilePath guessModName :: FilePath -> String uwModName :: FilePath -> String urblobfun :: [Char] urtextfun :: [Char] cblobfun :: PrintfType t => Args -> t ctextfun :: PrintfType t => Args -> t type Url = String css_mangle_flag :: [Char] module Development.Cake3 -- | The representation of Makefile variable. data Variable -- | Recipe answers to the question 'How to build the targets'. Internally, -- it contains sets of targets and prerequisites, as well as shell -- commands required to build former from latter data Recipe -- | Class of things which may be referenced using '$(expr)' syntax of the -- quasy-quoted shell expressions class (Monad a) => RefInput a x -- | Register the input item, return it's shell-script representation refInput :: RefInput a x => x -> a Command -- | Class of things which may be referenced using '@(expr)' syntax of the -- quasi-quoted shell expressions. class (Monad m) => RefOutput m x refOutput :: RefOutput m x => x -> A' m Command -- | Simple wrapper for strings, a target for various typeclass instances. data CakeString -- | An alias to CakeString constructor string :: String -> CakeString -- | Verison of Action monad with fixed parents type A a = A' (Make' IO) a type Make a = Make' IO a -- | Render the Makefile. Return either the content (Right), or error -- messages (Left). buildMake :: MakeState -> Either String String -- | Execute the mk monad, return the Makefile as a String. In -- case of errors, print report to stderr and abort the execution with -- fail call runMake :: Make a -> IO String -- | A Generic Make monad runner. Execute the monad mk, provide -- the output handler with Makefile encoded as a string. Note -- that Makefile may contain rules which references the file itself by -- the name makefile. In case of errors, print report to stderr -- and abort the execution with fail call runMakeH :: MakeState -> (String -> IO b) -> IO (MakeState, b) -- | A Version of runMakeH returning no state runMakeH_ :: MakeState -> (String -> IO b) -> IO b -- | Execute the mk monad, build the Makefile, write it to the -- output file. In case of errors, print report to stderr and abort the -- execution with fail call writeMake :: File -> Make a -> IO () -- | Add 'include ...' directive to the final Makefile for each input file. includeMakefile :: (Foldable t) => t File -> Make () -- | A Monad providing access to MakeState. TODO: not mention IO here. class (Monad m) => MonadMake m liftMake :: MonadMake m => (Make' IO) a -> m a -- | Build a Recipe using the builder provided and record it to the -- MakeState. Return the copy of Recipe (which should not be changed in -- future) and the result of recipe builder. The typical recipe builder -- result is the list of it's targets. -- -- Example Lets declare a rule which builds "main.o" out of -- "main.c" and CFLAGS variable -- --
-- let c = file "main.c" -- rule $ shell [cmd| gcc -c $(extvar "CFLAGS") -o @(c.="o") $c |] --rule' :: (MonadMake m) => A a -> m (Recipe, a) -- | Create the rule, place it's recipe above all recipies defined so far. -- See rule' for other details rule :: A a -> Make a -- | Adds the phony target for a rule. Typical usage: -- --
-- rule $ do -- phony "clean" -- unsafeShell [cmd|rm $elf $os $d|] --phony :: (Monad m) => String -> A' m () -- | Add it's argument to the list of dependencies (prerequsites) of a -- current recipe under construction depend :: (RefInput a x) => x -> a () -- | Declare that current recipe produces item x. produce :: (RefOutput m x) => x -> A' m () -- | Modifie the recipe builder: ignore all the dependencies ignoreDepends :: (Monad m) => A' m a -> A' m a -- | Add prebuild command prebuild :: (MonadMake m) => CommandGen -> m () -- | Add postbuild command postbuild :: (MonadMake m) => CommandGen -> m () class FileLike a combine :: FileLike a => a -> String -> a takeDirectory :: FileLike a => a -> a takeBaseName :: FileLike a => a -> String takeFileName :: FileLike a => a -> String makeRelative :: FileLike a => a -> a -> a replaceExtension :: FileLike a => a -> String -> a takeExtension :: FileLike a => a -> String takeExtensions :: FileLike a => a -> String dropExtensions :: FileLike a => a -> a dropExtension :: FileLike a => a -> a splitDirectories :: FileLike a => a -> [String] data FileT h a FileT :: h -> a -> FileT h a -- | Simple wrapper for FilePath. The first type argument is a Hint, -- containing the path to the current module type File = FileT ModuleLocation FilePath data ModuleLocation ModuleLocation :: FilePath -> FilePath -> ModuleLocation -- | Relative path from top-level dir to the module [top2mod] :: ModuleLocation -> FilePath -- | Relative path from module to the top-level dir [mod2top] :: ModuleLocation -> FilePath -- | Converts string representation of Path into type-safe File. -- Internally, files are stored in a form of offset from module root -- directory, plus the path from top-level dir to module root and back -- (see ModuleLocation) -- -- TODO: rename to mkFile file' :: ModuleLocation -> FilePath -> File -- | Alias for replaceExtension (.=) :: (FileLike a) => a -> String -> a -- | Redefine standard / operator to work with Files (>) :: (FileLike a) => a -> String -> a -- | Returns the path to the file, relative to the top-level directory (the -- place, where the target Makefile is located) topRel :: File -> FilePath -- | Obtain the contents of a File. Note, that this generally means, that -- Makefile should be regenerated each time the File is changed. readFileForMake :: (MonadMake m) => File -> m ByteString -- | A version of rule, without monad set explicitly rule' :: (MonadMake m) -- => A a -> m a rule' act = liftMake $ snd $ withPlacement -- (rule2 act) -- -- Build a rule for creating file tgt with a fixed content -- cnt, use additional actions act for the recipe genFile' :: File -> String -> A () -> Make File -- | Similar to @genFile' with empty additional action genFile :: File -> String -> Make File -- | Get a list of prerequisites added so far prerequisites :: (Applicative m, Monad m) => A' m (Set File) -- | Apply the recipe builder to the current recipe state. Return the list -- of targets of the current Recipe under construction shell :: (Monad m) => CommandGen' m -> A' m [File] -- | Version of shell which doesn't track it's dependencies unsafeShell :: (Monad m) => CommandGen' m -> A' m [File] -- | Has effect of a function QQ -> CommandGen where QQ is a -- string supporting the following syntax: -- --
-- [cmd|gcc $flags -o @file|] ---- -- is equivalent to -- --
-- return $ CommandGen $ do -- s1 <- refInput "gcc " -- s2 <- refInput (flags :: Variable) -- s3 <- refInput " -o " -- s4 <- refOutput (file :: File) -- return (s1 ++ s2 ++ s3 ++ s4) ---- -- Later, this command may be examined or passed to the shell function to -- apply it to the recipe cmd :: QuasiQuoter -- | Define the Makefile-level variable. Rules, referring to a variable, -- notice it's changes. makevar :: String -> String -> Variable -- | Declare the variable defined elsewhere. Typycally, environment -- variables may be decalred with this functions. Variables are tracked -- by the cake3. Rules, referring to a variable, notice it's -- changes. extvar :: String -> Variable tool :: String -> Tool -- | CommandGen is a recipe-builder packed in the newtype to prevent -- partial expansion of it's commands newtype CommandGen' m CommandGen' :: A' m Command -> CommandGen' m [unCommand] :: CommandGen' m -> A' m Command -- | Reref to special variable $(MAKE) make :: Variable currentDirLocation :: (MonadIO m) => m ModuleLocation gitSubmoduleFile :: File -> Make File module Development.Cake3.Ext.UrWeb -- | Converts FILE.urs to the Ur/Web module name embeddedModuleName :: File -> String data UrpAllow UrpMime :: UrpAllow UrpUrl :: UrpAllow UrpResponseHeader :: UrpAllow UrpEnvVar :: UrpAllow UrpHeader :: UrpAllow data UrpRewrite UrpStyle :: UrpRewrite UrpAll :: UrpRewrite UrpTable :: UrpRewrite data UrpHdrToken UrpSql :: File -> UrpHdrToken UrpAllow :: UrpAllow -> String -> UrpHdrToken UrpRewrite :: UrpRewrite -> String -> UrpHdrToken UrpLibrary :: File -> UrpHdrToken UrpDebug :: UrpHdrToken UrpInclude :: File -> UrpHdrToken -- | File.o to link, additional linker flags UrpLink :: File -> String -> UrpHdrToken UrpPkgConfig :: String -> UrpHdrToken UrpFFI :: File -> UrpHdrToken -- | Module name, UrWeb name, JavaScript name UrpJSFunc :: String -> String -> String -> UrpHdrToken UrpSafeGet :: String -> UrpHdrToken UrpScript :: String -> UrpHdrToken UrpClientOnly :: String -> UrpHdrToken UrpFile :: String -> File -> UrpHdrToken data UrpModToken UrpModule1 :: File -> UrpModToken UrpModule2 :: File -> File -> UrpModToken UrpModuleSys :: String -> UrpModToken data SrcFile SrcFile :: File -> String -> String -> SrcFile data DBString DBString :: String -> DBString data Urp Urp :: File -> Maybe File -> [UrpHdrToken] -> [UrpModToken] -> [SrcFile] -> [File] -> Maybe DBString -> [File] -> String -> Urp [urp_] :: Urp -> File [uexe] :: Urp -> Maybe File [uhdr] :: Urp -> [UrpHdrToken] [umod] :: Urp -> [UrpModToken] [srcs] :: Urp -> [SrcFile] [patches] :: Urp -> [File] [dbstr] :: Urp -> Maybe DBString -- | Additional prerequisites [prereq] :: Urp -> [File] [urautogen] :: Urp -> String newtype UWLib UWLib :: Urp -> UWLib newtype UWExe UWExe :: Urp -> UWExe urpDeps :: Urp -> [File] urpSql' :: Urp -> Maybe File urpSql :: Urp -> File urpExe' :: Urp -> Maybe File urpExe :: Urp -> File urpPkgCfg :: Urp -> [String] urpDatabase' :: Urp -> Maybe String urpDatabase :: Urp -> String urpDbname :: Urp -> [Char] defUrp :: File -> Urp -- | Returns autogen dir for the current module's file autogenDir :: (Monad m) => File -> UrpGen m File class ToUrpWord a toUrpWord :: ToUrpWord a => a -> String class ToUrpLine a toUrpLine :: ToUrpLine a => File -> a -> String maskPkgCfg :: [Char] -> [Char] newtype UrpGen m a UrpGen :: StateT Urp m a -> UrpGen m a [unUrpGen] :: UrpGen m a -> StateT Urp m a class (Monad m, Monad m1) => MonadUrpGen m1 m liftUrpGen :: MonadUrpGen m1 m => m1 a -> m a runUrpGen :: (Monad m) => File -> UrpGen m a -> m (a, Urp) tempPrefix :: File -> String manglePath :: FilePath -> String -- | Produce fixed-content rule using f as a uniq name template, add -- additional dependencies ds genIn :: File -> [File] -> Writer String a -> Make File line :: (MonadWriter String m) => String -> m () urweb :: Variable uwinclude :: Variable uwincludedir :: Variable uwcc :: Variable uwxx :: Variable uwcflags :: Variable uwlib :: File -> UrpGen (Make' IO) () -> Make UWLib uwflags :: Variable uwapp :: String -> File -> UrpGen (Make' IO) () -> Make UWExe uwapp_postgres :: File -> UrpGen (Make' IO) () -> (Make UWExe, Make File) addHdr :: (Monad m) => UrpHdrToken -> UrpGen m () addSrc :: (Monad m) => SrcFile -> UrpGen m () addPatch :: (Monad m) => File -> UrpGen m () database :: (Monad m) => String -> UrpGen m () allow :: (Monad m) => UrpAllow -> String -> UrpGen m () rewrite :: (Monad m) => UrpRewrite -> String -> UrpGen m () class LibraryDecl m x library :: LibraryDecl m x => x -> UrpGen m () -- | Build a file using external Makefile facility. externalMake3 :: File -> File -> String -> Make [File] -- | Build a file using external Makefile facility. externalMake' :: File -> File -> Make [File] -- | Build a file from external project. It is expected, that this project -- has a Makwfile in it's root directory. Call Makefile with the -- default target externalMake :: File -> Make [File] -- | Build a file from external project. It is expected, that this project -- has a Makwfile in it's root directory externalMakeTarget :: File -> String -> Make [File] -- | Build a file from external project. It is expected, that this project -- has a fiel.mk (a Makefile with an unusual name) in it's root directory externalMake2 :: File -> Make [File] addMod :: (Monad m) => UrpModToken -> UrpGen m () class ModuleDecl x ur :: (ModuleDecl x, Monad m) => x -> UrpGen m () sys :: String -> UrpModToken pair :: File -> UrpModToken debug :: (Monad m) => UrpGen m () include :: (Monad m) => File -> UrpGen m () class LinkDecl x link :: (LinkDecl x, MonadMake m) => x -> UrpGen m () class SrcDecl x src :: (SrcDecl x, MonadMake m) => x -> UrpGen m () ffi :: (MonadMake m) => File -> UrpGen m () css :: (MonadMake m) => File -> UrpGen m () sql :: (MonadMake m) => File -> UrpGen m () jsFunc :: Monad m => String -> String -> String -> UrpGen m () safeGet :: (MonadMake m) => String -> UrpGen m () url :: UrpAllow mime :: UrpAllow style :: UrpRewrite all :: UrpRewrite table :: UrpRewrite env :: UrpAllow hdr :: UrpAllow requestHeader :: UrpAllow responseHeader :: UrpAllow script :: (MonadMake m) => String -> UrpGen m () pkgconfig :: (MonadMake m) => String -> UrpGen m () urembed :: Tool embed' :: (MonadMake m) => [String] -> Bool -> File -> UrpGen m () class EmbedDecl x embed :: (EmbedDecl x, MonadMake m) => x -> UrpGen m () data Mangled_File CSS_File :: File -> Mangled_File JS_File :: File -> Mangled_File mangled :: File -> Make Mangled_File static :: (MonadMake m) => String -> File -> UrpGen m () file_ :: (MonadMake m) => String -> File -> UrpGen m () instance Control.Monad.IO.Class.MonadIO m => Control.Monad.IO.Class.MonadIO (Development.Cake3.Ext.UrWeb.UrpGen m) instance Development.Cake3.Monad.MonadMake m => Development.Cake3.Monad.MonadMake (Development.Cake3.Ext.UrWeb.UrpGen m) instance GHC.Base.Monad m => Control.Monad.State.Class.MonadState Development.Cake3.Ext.UrWeb.Urp (Development.Cake3.Ext.UrWeb.UrpGen m) instance GHC.Base.Monad m => GHC.Base.Monad (Development.Cake3.Ext.UrWeb.UrpGen m) instance GHC.Base.Monad m => GHC.Base.Applicative (Development.Cake3.Ext.UrWeb.UrpGen m) instance GHC.Base.Functor m => GHC.Base.Functor (Development.Cake3.Ext.UrWeb.UrpGen m) instance Data.Data.Data Development.Cake3.Ext.UrWeb.UWExe instance GHC.Show.Show Development.Cake3.Ext.UrWeb.UWExe instance Data.Data.Data Development.Cake3.Ext.UrWeb.UWLib instance GHC.Show.Show Development.Cake3.Ext.UrWeb.UWLib instance Data.Data.Data Development.Cake3.Ext.UrWeb.Urp instance GHC.Show.Show Development.Cake3.Ext.UrWeb.Urp instance Data.Data.Data Development.Cake3.Ext.UrWeb.DBString instance GHC.Show.Show Development.Cake3.Ext.UrWeb.DBString instance Data.Data.Data Development.Cake3.Ext.UrWeb.SrcFile instance GHC.Show.Show Development.Cake3.Ext.UrWeb.SrcFile instance Data.Data.Data Development.Cake3.Ext.UrWeb.UrpModToken instance GHC.Show.Show Development.Cake3.Ext.UrWeb.UrpModToken instance Data.Data.Data Development.Cake3.Ext.UrWeb.UrpHdrToken instance GHC.Show.Show Development.Cake3.Ext.UrWeb.UrpHdrToken instance Data.Data.Data Development.Cake3.Ext.UrWeb.UrpRewrite instance GHC.Show.Show Development.Cake3.Ext.UrWeb.UrpRewrite instance Data.Data.Data Development.Cake3.Ext.UrWeb.UrpAllow instance GHC.Show.Show Development.Cake3.Ext.UrWeb.UrpAllow instance GHC.Base.Monad m => Development.Cake3.Monad.RefInput (Development.Cake3.Monad.A' m) Development.Cake3.Ext.UrWeb.UWLib instance GHC.Base.Monad m => Development.Cake3.Monad.RefInput (Development.Cake3.Monad.A' m) Development.Cake3.Ext.UrWeb.UWExe instance Development.Cake3.Ext.UrWeb.ToUrpWord Development.Cake3.Ext.UrWeb.UrpAllow instance Development.Cake3.Ext.UrWeb.ToUrpWord Development.Cake3.Ext.UrWeb.UrpRewrite instance Development.Cake3.Ext.UrWeb.ToUrpLine Development.Cake3.Ext.UrWeb.DBString instance Development.Cake3.Ext.UrWeb.ToUrpLine Development.Cake3.Ext.UrWeb.UrpHdrToken instance Development.Cake3.Ext.UrWeb.ToUrpLine Development.Cake3.Ext.UrWeb.UrpModToken instance GHC.Base.Monad m => Development.Cake3.Monad.RefInput (Development.Cake3.Ext.UrWeb.UrpGen m) Development.Cake3.Types.File instance GHC.Base.Monad m => Development.Cake3.Ext.UrWeb.MonadUrpGen m (Development.Cake3.Ext.UrWeb.UrpGen m) instance GHC.Base.Monad m => Development.Cake3.Ext.UrWeb.LibraryDecl m Development.Cake3.Types.File instance GHC.Base.Monad m => Development.Cake3.Ext.UrWeb.LibraryDecl m [Development.Cake3.Types.File] instance GHC.Base.Monad m => Development.Cake3.Ext.UrWeb.LibraryDecl m Development.Cake3.Ext.UrWeb.UWLib instance GHC.Base.Monad m => Development.Cake3.Ext.UrWeb.LibraryDecl m Development.Cake3.Ext.UrWeb.UWExe instance GHC.Base.Monad m => Development.Cake3.Ext.UrWeb.LibraryDecl m (m Development.Cake3.Types.File) instance (GHC.Base.Monad m, Development.Cake3.Ext.UrWeb.LibraryDecl m x) => Development.Cake3.Ext.UrWeb.LibraryDecl m (m x) instance Development.Cake3.Ext.UrWeb.ModuleDecl Development.Cake3.Types.File instance Development.Cake3.Ext.UrWeb.ModuleDecl Development.Cake3.Ext.UrWeb.UrpModToken instance Development.Cake3.Ext.UrWeb.ModuleDecl (Development.Cake3.Types.File, Development.Cake3.Types.File) instance Development.Cake3.Ext.UrWeb.LinkDecl (Development.Cake3.Types.File, GHC.Base.String) instance Development.Cake3.Ext.UrWeb.LinkDecl Development.Cake3.Types.File instance Development.Cake3.Ext.UrWeb.LinkDecl x => Development.Cake3.Ext.UrWeb.LinkDecl (Development.Cake3.Monad.Make' GHC.Types.IO x) instance Development.Cake3.Ext.UrWeb.SrcDecl (Development.Cake3.Types.File, GHC.Base.String, GHC.Base.String) instance Development.Cake3.Ext.UrWeb.SrcDecl Development.Cake3.Types.File instance Development.Cake3.Ext.UrWeb.SrcDecl x => Development.Cake3.Ext.UrWeb.SrcDecl (Development.Cake3.Monad.Make x) instance Development.Cake3.Ext.UrWeb.EmbedDecl Development.Cake3.Types.File instance Development.Cake3.Ext.UrWeb.EmbedDecl Development.Cake3.Ext.UrWeb.Mangled_File instance Development.Cake3.Ext.UrWeb.EmbedDecl x => Development.Cake3.Ext.UrWeb.EmbedDecl (Development.Cake3.Monad.Make x) module Development.Cake3.Utils.Find filterDirectoryContentsRecursive :: (MonadIO m) => [String] -> m [File] filterExts :: [String] -> [File] -> [File] getDirectoryContentsRecursive' :: (MonadIO m) => FilePath -> m [FilePath] getDirectoryContentsRecursive :: (MonadIO m) => File -> m [File] module Development.Cake3.Utils.Slice -- | Build the full Makefile named fo and a set of sliced -- versions. Slicing here means filtering out all rules -- depending on certain tools (second element of every sls -- pairs) and all the upstream rules. writeSliced :: File -> [(File, [Tool])] -> Make a -> IO ()