}(p:0      !"#$%&'()*+,-./ 0 123&Like an MVar, but must always be full 456789:;< 1356789:;< 1356789:;<=>?@ABCDEFGHIJKLMNO=>?=>?>?PQRSTUVWXYZ[\]^_`a PUWYZ[\]^`a PUWYZ[\]^`a:bcdefghijklmnopqrstuvwxyz{|}~NInvariant: The database does not have any cycles when a Key depends on itself qrstqtsrrst Drop the first directory from a . Should only be used on  relative paths. # dropDirectory1 "aaa/bbb" == "bbb"  dropDirectory1 "aaa/" == ""  dropDirectory1 "aaa" == ""  dropDirectory1 "" == "" Take the first component of a . Should only be used on  relative paths. # takeDirectory1 "aaa/bbb" == "aaa"  takeDirectory1 "aaa/" == "aaa"  takeDirectory1 "aaa" == "aaa"  Normalise a %, translating any path separators to /. *Convert to native path separators, namely \ on Windows. %Combine two file paths, an alias for . $Combine two file paths. Any leading ./ or ../ components in the right file  are eliminated. * combine "aaa/bbb" "ccc" == "aaa/bbb/ccc" , combine "aaa/bbb" "./ccc" == "aaa/bbb/ccc" ) combine "aaa/bbb" "../ccc" == "aaa/ccc" 43The  monad, use  to raise  actions into it, and need to execute files.  Action values are used by  and . :Define a set of rules. Rules can be created with calls to ,  or . Rules are combined  with either the & instance, or more commonly using the  instance and do notation. 8Define a pair of types that can be used by Shake rules. !Given that the database contains key/value., does that still match the on-disk contents? As an example for filenames/?timestamps, if the file exists and had the same timestamp, you  would return , but otherwise return ,. For rule values which are not also stored  on disk,   should always return . Options to control shake. @Where shall I store the database and journal files (defaults to .). JWhat is the maximum number of rules I should run in parallel (defaults to 1). QWhat is the version of your build system, increment to force a complete rebuild. !1 = normal, 0 = quiet, 2 = loud. The default set of  . Like , but lower priority, if no  exists then  is checked. ' All default rules must be disjoint. 4Add a rule to build a key, returning an appropriate . All rules must be disjoint. & To define lower priority rules use . CRun an action, usually used for specifying top-level requirements. MThis function is not actually exported, but Haddock is buggy. Please ignore. aExecute a rule, returning the associated values. If possible, the rules will be run in parallel. F This function requires that appropriate rules have been added with  or . +Apply a single rule, equivalent to calling ( with a singleton list. Where possible,  use ) to allow the potential for parallelism. 7Write an action to the trace list, along with the start/#end time of running the IO action.  The system' command automatically calls . Get the WK for the currently executing rule - usally used to improve error messages.  Returns  if being run by . AWrite a message to the output when the verbosity is appropriate. D The output will not be interleaved with any other Shake messages 4 (other than those generated by system commands). AWrite a message to the output when the verbosity is appropriate. D The output will not be interleaved with any other Shake messages 4 (other than those generated by system commands). AWrite a message to the output when the verbosity is appropriate. D The output will not be interleaved with any other Shake messages 4 (other than those generated by system commands).      -A type synonym for file patterns, containing // and *. For the syntax  and semantics of  see #. MThis function is not actually exported, but Haddock is buggy. Please ignore. KRequire that the following files are built before continuing. Particularly  necessary when calling system'. As an example:  "//*.rot13" *> \out -> do ! let src = dropExtension out  need [src] $ system' ["rot13",src,"-o",out] ORequire that the following are built by the rules, used to specify the target.   main = shake shakeOptions $ do  want ["Main.exe"]  ... This program will build Main.exe, given sufficient rules. <Define a rule to build files. If the first argument returns  for a given file, 9 the second argument will be used to build it. Usually " is sufficient, but   gives X additional power. For any file used by the build system, only one rule should return . , (all isUpper . takeBaseName) *> \out -> do D let src = replaceBaseName out $ map toLower $ takeBaseName out 0 writeFile' . map toUpper =<< readFile' src !PDefine a set of patterns, and if any of them match, run the associate rule. See ". "Define a rule that matches a ). No file required by the system must be @ matched by more than one pattern. For the pattern rules, see #.   "*.asm.o" *> \out -> do ! let src = dropExtension out  need [src] ! system' ["as",src,"-o",out] MTo define a build system for multiple compiled languages, we recommend using .asm.o,  .cpp.o, .hs.o6, to indicate which language produces an object file. #Match a  against a $, There are only two special forms:  *= matches an entire path component, excluding any separators.  //2 matches an arbitrary number of path componenets. Some examples that match:  "//*.c" ?== "foo/bar/baz.c"  "*.c" ?== "baz.c"  "test.c" ?== "test.c"  !"# !"# $ZExecute a system command. This function will raise an error if the exit code is non-zero.  Before running $ make sure you  any required files. %copyFile old new copies the existing file from old to new. The old file is has  called on it  before copying the file. &Read a file, after calling . 'Write a file, lifted to the  monad. ( A version of &* which also splits the result into lines. ) A version of '# which writes out a list of lines. $%&'()$%&'() *MThis function is not actually exported, but Haddock is buggy. Please ignore. +Returns  if the file exists. ,QGet the contents of a directory. The result will be sorted, and will not contain  the files . or ..@ (unlike the standard Haskell version). It is usually better to  call either - or .'. The resulting paths will be relative  to the first argument. ->Get the files in a directory that match a particular pattern. - For the interpretation of the pattern see #. .?Get the directories contained by a directory, does not include . or ... *+,-.*+,-./EMain entry point for running Shake build systems. For an example see Development.Shake. '  !"#$%&'()+,-./*/  $%&'()#"! +,-.*/   !"#$%& ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9:;<<==>?@ABCDEFGHIJKIJLIJMIJNIJOPQRPQSPQTPQUPQVPQWPQXPYZPY[P\]P\^__`abccddefghijklmnnoppqqrskttuvwxxyz{|}~IuIII             shake-0.1.1Development.Shake.FilePathDevelopment.ShakeDevelopment.Shake.TypeHashDevelopment.Shake.LocksDevelopment.Shake.BinaryDevelopment.Shake.ValueDevelopment.Shake.DatabaseDevelopment.Shake.CoreDevelopment.Shake.FileDevelopment.Shake.DerivedDevelopment.Shake.DirectorydropDirectory1takeDirectory1 normalisetoNativecombineActionRulesRule validStored ShakeOptions shakeFiles shakeParallel shakeVersionshakeVerbosity shakeOptions defaultRuleruleactionrunapplyapply1traced currentRuleputLoud putNormalputQuiet FilePatterndefaultRuleFileneedwant?>**>*>?==system' copyFile' readFile' writeFile' readFileLineswriteFileLinesdefaultRuleDirectory doesFileExistgetDirectoryContentsgetDirectoryFilesgetDirectoryDirsshaketypeHashBarrierVarnewVarreadVar modifyVar modifyVar_ newBarrierreleaseBarrier waitBarrierwaitAnyBarrier BinaryWithputWithgetWithbaseGHC.WordWordWord8Word16Word32Word64binary-0.5.0.2 Data.Binary decodeFile encodeFiledecodeencodegetputBinaryData.Binary.PutputWord8PutData.Binary.GetgetWord8GetWitness typeNames witnessIn witnessOutValueKeynewKeynewValuetypeKey typeValuefromKey fromValuewitnessregisterWitnesscurrentWitnessStatuses fromStatuses WitnessedJournalhandle journalFile Response_executebarriersvaluesResponseBlockExecuteStatusLoadedBuiltBuildingInfovaluebuiltchangeddepends executiontracesDatabasestatus timestampjournalfilenameversionTimeMap removeFile_concatResponse toResponserequestfinished withDatabase openDatabase closeDatabase writeDatabase readDatabase openJournal replayJournal appendJournal closeJournal readFileVer readChunks writeChunkGHC.IOFilePathfilepath-1.2.0.1System.FilePath.Posix makeRelative isAbsolute isRelative makeValidisValid equalFilePathjoinPathsplitDirectories splitPathreplaceDirectory takeDirectorydropTrailingPathSeparatoraddTrailingPathSeparatorhasTrailingPathSeparatorreplaceBaseName takeBaseName takeFileName dropFileNamereplaceFileName splitFileNameisDrivehasDrive dropDrive takeDrive joinDrive splitDrivetakeExtensionsdropExtensionssplitExtensions hasExtension addExtension dropExtension<.>replaceExtension takeExtensionsplitExtension getSearchPathsplitSearchPathisExtSeparator extSeparatorisSearchPathSeparatorsearchPathSeparatorisPathSeparatorpathSeparators pathSeparatortransformers-0.2.2.0Control.Monad.IO.ClassliftIOghc-prim GHC.TypesIOSdatabasepoolstartedstored outputLock verbositystackdiscount Data.MonoidMonoidGHC.BaseMonadactionsrulesARuleTrueFalseruleKey ruleValue ruleStoredregisterWitnesses createStored createExecute runActionduration Data.MaybeNothingputWhenFileTimeFile getFileTimeGetDir_GetDir GetDirDirs GetDirFilespatdirExistgetDir