l@      !"#$%&'()*+,-./0123456789:;<=>?None@AB@AB@AB Safe-InferedVThe type representing a finite resource, which multiple build actions should respect.  Created with  in the C monad before calling ,  and used with  in the  monad  when defining rules. WAs an example, only one set of calls to the Excel API can occur at one time, therefore < Excel is a finite resource of quantity 1. You can write:    do excel <-  "Excel" 1   {  =2} $ do    ["a.xls","b.xls"]  "*.xls"   \out ->   excel 1 $    "excel" [out,...] Now the two calls to excel$ will not happen in parallel. Using   is better than D8 as it will not block any other threads from executing. ^As another example, calls to compilers are usually CPU bound but calls to linkers are usually b disk bound. Running 8 linkers will often cause an 8 CPU system to grid to a halt. We can limit  ourselves to 4 linkers with:   do disk <-  "Disk" 4   {  =8} $ do    [show i   "exe" | i < - [1..100]]  "*.exe"   \out ->   disk 1 $    "ld" ["-o",out,...]  "*.o"   \out ->    "cl" ["-o",out,...] E.Starts out empty, then is filled exactly once F&Like an MVar, but must always be full GLike an MVar, but has no value lCreate a new finite resource, given a name (for error messages) and a quantity of the resource that exists.  For an example see . HjTry to acquire a resource. Returns Nothing to indicate you have acquired with no blocking, or Just act to O say after act completes (which will block) then you will have the resource. IMYou should only ever releaseResource that you obtained with acquireResource. EFGJKLMNOPQRHISTUVEFGJKLMNOPQRHIEFGJKLMNOPQRHISTUV Safe-InferedWAdd a new task to the pool XEA blocking action is being run while on the pool, yeild your thread. 5 Should only be called by an action under addPool. Y<Run all the tasks in the pool on the given number of works. F If any thread throws an exception, the exception will be reraised. ZWXYZWXYZWXY Safe-Infered[\]^_`abcdefghijklmno[\][\]^_Nonepqrstuvwxyz{|}~ pqrstuvwxyzpqrstuvwxyz{|}~ Safe-Infered[Given a Key and a Value from the database, check it still matches the value stored on disk mGiven a chunk of stack (bottom element first), and a key, either raise an exception or successfully build it NInvariant: The database does not have any cycles when a Key depends on itself DCall once at the start, then call repeatedly to get Time values out TReturn either an exception (crash), or (how much time you spent waiting, the value) \Return a list of keys in an order which would build them bottom up. Relies on the invariant $ that the database is not cyclic.  Safe-Infered 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 , applying the standard  normalisation, plus & translating any path separators to / and removing foo/.. components where possible. *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" 4None -A type synonym for file patterns, containing // and *. For the syntax  and semantics of   see  . 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"  "//*.c" ?== "baz.c"  "test.c" ?== "test.c" Examples that don't match:  "*.c" ?== "foor/bar.c"  "*/*.c" ?== "foo/bar/baz.c" Do they have the same * and  counts in the same order EExtract the items that match the wildcards. The pair must match with  . Given the result of , substitute it back in to a  pattern. / p '?==' x ==> substitute (extract p x) p == x    None The   monad, use  to raise C 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) 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 . !The verbosity data type, used by . HPrint messages for virtually everything (for debugging a build system). HPrint lots of messages (typically errors, warnings and status updates). 7Print normal messages (typically errors and warnings). 2Only print essential messages (typically errors). Don't print any messages. UOptions to control the execution of Shake, usually specified by overriding fields in  :  {=4, =True}@Where shall I store the database and journal files (defaults to .shake). JWhat is the maximum number of rules I should run in parallel (defaults to 1). 6 To enable parallelism you may need to compile with  -threaded. ]What is the version of your build system, increment to force a complete rebuild (defaults to 1). (What messages to print out (defaults to ). QOperate in staunch mode, where building continues even after errors (defaults to ). "Dump all profiling information to  plus the extension .js (defaults to ). 8Perform basic sanity checks after building (defaults to ). 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 parallelism. $7Write an action to the trace list, along with the start/#end time of running the IO action.  The   command automatically calls $-. The trace list is used for profile reports  (see ). %2Write 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). &2Write 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). '2Write 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). (+Get the current verbosity level, as set by  . If you I want to output information to the console, you are recommended to use  % / & / '&, which ensures multiple messages are  not interleaved. )GRun an action which uses part of a finite resource. For an example see . %  !"#$%&'()"  !"#$%&'()  !"#$%&'()NoneMThis 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 ... *+,-*+,- *+,-NoneMThis function is not actually exported, but Haddock is buggy. Please ignore. .KRequire that the following files are built before continuing. Particularly  necessary when calling  . As an example:   "*.rot13" 2 \ out -> do  let src =  out  . [src]    ["rot13",src,"-o",out] /ORequire that the following are built by the rules, used to specify the target.    main =   $ do  / ["Main.exe"]  ... This program will build Main.exe, given sufficient rules. 0<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 2 is sufficient, but 0 gives X additional power. For any file used by the build system, only one rule should return .   (all isUpper . ) 0 \ out -> do  let src = & out $ map toLower $ takeBaseName out   . map toUpper =<<  src 1QDefine a set of patterns, and if any of them match, run the associated rule. See 2. 2Define 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" 2 \ out -> do  let src =  out  . [src]    ["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.  I.e., the file foo.cpp produces object file  foo.cpp.o. 7Note that matching is case-sensitive, even on Windows. ./012./012./012None3FAdd extra information which your build should depend on. For example:  & addOracle ["ghc"] $ return ["7.2.1"] 0 addOracle ["ghc-pkg","shake"] $ return ["1.0"] 6If a rule depends on the GHC version, it can then use 4 ["ghc"], and Z if the GHC version changes, the rule will rebuild. It is common for the value returned  by 4 to be ignored. The Oracle maps questions of [String] and answers of [String]. This type is a Z compromise. Questions will often be the singleton list, but allowing a list of strings R there is more flexibility for heirarchical schemes and grouping - i.e. to have   ghc-pkg shake,  ghc-pkg base1 etc. The answers are often singleton lists, but M sometimes are used as sets - for example the list of packages returned by ghc-pkg. Actions passed to 39 will be run in every Shake execution they are required, Z their value will not be kept between runs. To get a similar behaviour using files, see  . 4&Get information previously added with 3. 343434None5IAlways rerun the associated action. Useful for defining rules that query ! the environment. For example:   "ghcVersion.txt"   \ out -> do  5  (stdout,_) <-  "ghc" [" --version"]   out stdout 555None6<Define a rule for building multiple files at the same time. ; As an example, a single invokation of GHC produces both .hi and .o files:    ["*.o","*.hi"] 6 \[o,hi] -> do  let hs =  o "hs"   ! ... -- all files the .hs import    "ghc" ["-c",hs] However, in practice, it'&s usually easier to define rules with 2 and make the .hi depend  on the .o9. When defining rules that build multiple files, all the   values must  have the same sequence of // and * wildcards in the same order. 666! Safe-Infered7ZExecute a system command. This function will raise an error if the exit code is non-zero.  Before running 7 make sure you . any required files. 8$Execute a system command, returning (stdout,stderr). C This function will raise an error if the exit code is non-zero.  Before running 8 make sure you . any required files. 9copyFile 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. >5Write a file, but only if the contents would change. 789:;<=>789:;<=>789:;<=> Safe-Infered?[Main entry point for running Shake build systems. For an example see the top of the module Development.Shake.  Use % to specify how the system runs, and   to specify what to build. ?:  !"#$%&'()*+,-./0123456789:;<=>?:?   ! "#$(%'&789:;<=>./2106 *+,-345)?"#$%&'()*+,-./01234567889 :;<=>?@ABCDEFGHIJKL  MN OPQ! !!R!!!S!T!UVWXYZ[\]^_`abcdefghijklmnopqrstuvwx[yz[y{[y|[y}[y~[ [[XYXY shake-0.2.6Development.ShakeDevelopment.Shake.FilePathDevelopment.Shake.FileTimeDevelopment.Shake.Locksshake withResourceAction shakeOptions shakeThreadswant*>system'<.>Development.Shake.PoolDevelopment.Shake.BinaryDevelopment.Shake.ValueDevelopment.Shake.DatabaseDevelopment.Shake.FilePatternDevelopment.Shake.CoreDeveloment.ShakeDevelopment.Shake.DirectoryDevelopment.Shake.File writeFile' readFile'Development.Shake.Oracle alwaysRerunDevelopment.Shake.Rerun systemOutputwriteFileChangedDevelopment.Shake.FilesreplaceExtensionneedDevelopment.Shake.Derivedtransformers-0.2.2.0Control.Monad.IO.ClassliftIOResource newResourcedropDirectory1takeDirectory1 normalisetoNativecombine FilePattern?==RulesRule validStored Verbosity DiagnosticLoudNormalQuietSilent ShakeOptions shakeFiles shakeVersionshakeVerbosity shakeStaunch shakeDump shakeLint defaultRuleruleactionapplyapply1tracedputLoud putNormalputQuiet getVerbosity doesFileExistgetDirectoryContentsgetDirectoryFilesgetDirectoryDirs?>**> addOracle askOracle*>> copyFile' readFileLineswriteFileLinesFileTimegetModTimeMaybegetModTimeErrorghc-prim GHC.TypesIObaseGHC.MVarMVarBarrierVarLockacquireResourcereleaseResourcenewLockwithLocknewVarreadVar modifyVar modifyVar_ newBarrier signalBarrier waitBarrier$fShowResource $fShowBarrier $fShowVar $fShowLockaddPool blockPoolrunPoolPool BinaryWithputWithgetWith$fBinaryWithctx[]$fBinaryWithctx(,)GHC.WordWordWord8Word16Word32Word64binary-0.5.1.0 Data.Binary decodeFile encodeFiledecodeencodegetputBinaryData.Binary.PutputWord8PutData.Binary.GetgetWord8GetWitnessValueKeynewKeynewValuetypeKey typeValuefromKey fromValueregisterWitnesscurrentWitness$fBinaryWithWitnessValue$fBinaryWitness $fEqValue$fHashableValue $fNFDataValue $fShowValue $fShowKeyvalidexecDatabase startTimebuild allEntriesOpsTraceTimeDurationdurationshowJSON checkValid withDatabase$fBinaryWithWitnessResult$fBinaryWithWitnessStatuses$fBinaryWitnessed $fBinaryStep $fShowPendingGHC.IOFilePathfilepath-1.3.0.0System.FilePath.Posix makeRelative isAbsolute isRelative makeValidisValid equalFilePathjoinPathsplitDirectories splitPathreplaceDirectory takeDirectorydropTrailingPathSeparatoraddTrailingPathSeparatorhasTrailingPathSeparatorreplaceBaseName takeBaseName takeFileName dropFileNamereplaceFileName splitFileNameisDrivehasDrive dropDrive takeDrive joinDrive splitDrivetakeExtensionsdropExtensionssplitExtensions hasExtension addExtension dropExtension takeExtensionsplitExtension getSearchPathsplitSearchPathisExtSeparator extSeparatorisSearchPathSeparatorsearchPathSeparatorisPathSeparatorpathSeparators pathSeparator compatibleextract substitute Data.MonoidMonoidGHC.BaseMonadTrueFalserun$fFunctorRules $fMonadRules $fMonoidRules$fShowShakeException$fExceptionShakeExceptiondefaultRuleDirectory$fRuleGetDirGetDir_$fRuleExistBool$fBinaryGetDir$fHashableGetDir$fNFDataGetDir $fShowGetDir $fShowExistdefaultRuleFile$fRuleFileFileTime $fShowFile$fRuleQuestionAnswer$fShowQuestiondefaultRuleRerun$fRuleAlwaysRerunDirty $fEqDirty $fShowDirty$fShowAlwaysRerun$fRuleFilesFileTimes $fShowFiles