!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRS T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q rstuvwxyz{| } ~   NoneRead a time of day string like 17:34:05 in the local time zone [ and convert that to a UTC time of day. Good for parsing command line args to buildbots. PGet a local time stamp with format YYYYMMDD_HHMMSS. Good for naming files with. Get the local midnight we've just had as a . Get the local midnight that we've just had, as a . Get the local midnight we're about to have as a . Get the local midnight we're about to have as a . V      !"#$%&'()*+,-./0123456789:;<=>?@A Safe-Inferred+Get the names of all files in a directory. ( This filters out the fake files like B and '..' +Get the names of all the dirs in this one. ( This filters out the fake files like B and '..' 0Get all the files reachable from this directory CDrop out the fake B and '..' dirst from a list of paths. CC Safe-Inferred DE    DE Safe-Inferred 6Gang was killed, all the threads are dead (or dying). 2Gang is finished, all the actions have completed. :Gang is waiting for currently running actions to finish,  but not starting new ones. .Gang may be running already started actions, & but no new ones are being started. *Gang is running and starting new actions. Abstract gang of threads. Get the state of a gang. 1Block until all actions have finished executing,  or the gang is killed. ;Block until already started actions have completed, but don't start any more.  Gang state changes to . GPause a gang. Actions that have already been started continue to run, ' but no more will be started until a  command is issued.  Gang state changes to . HResume a paused gang, which allows it to continue starting new actions.  Gang state changes to .  Kill all the threads in a gang.  Gang stage changes to  . ,Block until the gang is in the given state. *Fork a new gang to run the given actions. Q This function returns immediately, with the gang executing in the background.  Gang state starts as  then transitions to  . 3 To block until all the actions are finished use . FRun actions on a gang.  GHIJKL%Number of worker threads in the gang / maximum number & of actions to execute concurrenty. :Actions to run. They are started in-order, but may finish D out-of-order depending on the run time of the individual action. FM     GHIJKLFMNone9Map of event names to their details and build commands. :Records when an event should start, and when it last ran. A unique name for this event. - Used when writing the schedule to a file. When to run the command. Modifier to the previous. !)When the event was last started, if any. "&When the event last finished, if any. $Modifier to when. %2Wait until after this time before doing it first. &If the event hasn'-t been invoked before then do it immediately # when we start the cron process. 'When to invoke some event. (!Do it each day at this time. The ''days'' are UTC days, not local ones. )(Do it some time after it last finished. **Do it some time after we last started it. +Don't do it, ever. ,Just keep doing it. 1XGiven the current time and a list of events, determine which one should be started now. S If several events are avaliable then take the one with the earliest start time. 2BGiven the current time, decide whether an event could be started.  If the $ is & this always returns true.  The  SkipFirst5 modifier is ignored, as this is handled separately. 3CGet the list of events in a schedule, ignoring the build commands. 4"A nice way to produce a schedule. 5BGiven an event name, lookup the associated event from a schedule. 6JGiven an event name, lookup the associated build command from a schedule. 7LGiven a new version of an event, update any matching event in the schedule. E If the event not already there then return the original schedule.  !"#$%&'()*+,-./01234567N !"#$%&'()*+,-./01234567-./0',+*)($&%# !"1245673 !"#$&%',+*)(-./01234567NNoneOEContinually read lines from a handle and write them to this channel. ' When the handle hits EOF then write P to the channel. QEContinually read lines from some channels and write them to handles.  When all the channels return P then we' re done.  When we',re done, signal this fact on the semaphore. RLike S=, but return the newline charater on the end of the string, S if there was one. This allows us to distinguish between lines that were flushed N from the IO buffer due to a newline character, and partial lines that were  flushed manually, and don't have a newline. OT3whether the last line ended in a newline character handle to read lines from channel to write lines to UQRVWOQOTUQRVW Safe-Inferred8Global builder configuration. :6Log all system commands executed to this file handle. ;%Uniqueish id for this build process.  On POSIX we'd use the PID, but that doesn't work on Windows. L The id is initialised by the Haskell random number generator on startup. <1Sequence number for generating fresh file names. =)Scratch directory for making temp files. >The default build config. 89:;<=>89:;<=>89:;<=> Safe-Inferred @;A sequence of lines, without newline charaters on the end. AO(1) No logs here. B O(1) Check if the log is empty. CO(n) Convert a @ to a X. DO(n) Convert a X to a @. E O(1) Add a ? to the start of a @. F O(1) Add a ? to the end of a @. G#O(log(min(n1,n2))) Concatenate two @s. H'O(n) Take the first m lines from a log I&O(n) Take the last m lines from a log ?@ABCDEFGHI ?@ABCDEFGHI @?ABCDEFGHI ?@ABCDEFGHINoneL5Right justify a doc, padding with a given character. M$Right justify a string with spaces. N7Left justify a string, padding with a given character. O#Left justify a string with spaces. P-Blank text. This is different different from Y1 because it comes out a a newline when used in a Z. QLike R but don',t display fractional part when the value is < 1000. M Good for units where fractional values might not make sense (like bytes). R=Pretty print an engineering value, to 4 significant figures.  Valid range is 10^(-24) (y/yocto) to 10^(+24) (Y/Yotta). & Out of range values yield Nothing.  examples:   liftM render $ pprEngDouble "J" 102400 ==> Just "1.024MJ"  liftM render $ pprEngDouble "s" 0.0000123 ==> Just "12.30us" JKLMNOPQR[\]^_`aFbcdefghijklmnopZqrstuvwxyz{|}~YJKLMNOPQR JKLMNOPRQJKLMNOPQR[\]^_`a NoneSThe comparison of two values. TA new value that doesn't have a baseline. V.Comparison of a recent value with a baseline. Z#Make a comparison from two values. STUVWXYZSTUVWXYZSVTWXYUZSVTWXYUZ None[*Some static size of the benchmark that isn't affected during the run. ]%Some resource used during execution. `'Something that takes time to evaluate. [\]^_`abcdefghij[\]^_`abcdefghijgjih`fedcba]_^[\[\]_^`fedcbagjih Nonek*A range extracted from many-valued data. p'Make statistics from a list of values. q Flatten a k- into a list of its min, avg and max values. klmnopqklmnopqklmnopqklmnopqNonerThe errors we recognise. s6A build command needs the following file to continue. 0 This can be used for writing make-like bots. tSome property check< was supposed to return the given boolean value, but it didn't. u$Some miscellanous IO action failed. vNSome system command fell over, and it barfed out the given stdout and stderr. {Some generic error rstuvwxyz{ rstuvwxyz{r {vutswxyz None|5Bytes of data, pretty printed in engineering format. ~7Seconds of time, pretty printed in engineering format. |}~|}~~|} |}~NoneKThe builder monad encapsulates and IO action that can fail with an error, 1 and also read some global configuration info. LRun a build command. The first argument is a directory that can be used for  temporary files (like "/tmp") Like 2, but report whether it succeeded to the console. > If it succeeded then return Just the result, else Nothing. Like  but also takes a 8. Like  but also takes a 8. -Discard the resulting value of a compuation.  Used like successfully . runBuild ... 'Get a unique(ish) id for this process. b The random seeds the global generator with the cpu time in psecs, which should be good enough. #Throw an error in the build monad. 7Run a build command, catching any exceptions it sends. 4Throw a needs error saying we needs the given file. ] A catcher could then usefully create the file, or defer the compuation until it has been  created. (Lift an IO action into the build monad. G If the action throws any exceptions they get caught and turned into  u exceptions in our  monad. Like , but with teh monadz. Print some text to stdout. 1Print some text to stdout followed by a newline. Print a blank line to stdout Print a ----- line to stdout Print a ===== line to stdout  NoneSome testable property. #Testable properties are checkable. 3 If the check returns false then throw an error. #Testable properties are checkable. 2 If the check returns true then throw an error. *Check some property while printing what we' re doing. *Check some property while printing what we' re doing. None Benchmark result. Benchmark definition.  A unique name for the benchmark 0Setup command to run before the main benchmark. H This does not contribute to the reported time of the overall result. The main command to benchmark. 7Check and post-process the result of the main command. H This does not contribute to the reported time of the overall result. Run a benchmark a single time. +Run a benchmark the given number of times. +Run a command, returning its elapsed time. None*Log a system command to the handle in our  BuildConfig , if any. (89:;<=>rstuvwxyz{"89:;<=>r{vutswxyzNonerstuvwxyz{r{vutswxyzNone Run a system command, 0 returning its exit code and what it wrote to stdout and stderr. Quietly run a system command, 0 returning its exit code and what it wrote to stdout and stderr. "Run a successful system command,  returning what it wrote to stdout and stderr.  If the exit code is  then throw an error in the  monad. )Quietly run a successful system command,  returning what it wrote to stdout and stderr.  If the exit code is  then throw an error in the  monad. @Run a successful system command, returning what it wrote to its stdout.  If anything was written to stderr then treat that as failure. ! If it fails due to writing to stderr or returning   then throw an error in the  monad. HQuietly run a successful system command, returning what it wrote to its stdout.  If anything was written to stderr then treat that as failure. ! If it fails due to writing to stderr or returning   then throw an error in the  monad. Like  , but in the  monad. Like  , but in the  monad. Like  , but in the ( monad and throw an error if it returns . Like , but with strings. $Run a system command, returning its  and what was written to stdout and stderr. Whether stdout and stderr, should be forwarded to the parent process. Command to run. What to pass to the command's stdin.  NoneIList all patches in the given repository. If no repository is given, the & current working directory is used. 0Retrieve the last N changes from the repository FRetrieve all patches submitted to the repository after the given time  None /Properties of the file system we can test for. Some file is empty. Some directory exists. Some file exists. (Some executable is in the current path. VRun a command in a different working directory. Throws an error if the directory doesn' t exist. ECreate a new directory with the given name, run a command within it, X then change out and recursively delete the directory. Throws an error if a directory ' with the given name already exists. Delete a dir recursively if it's there, otherwise do nothing.  Unlike , this function does . not follow symlinks, it just deletes them.  Create a new directory if it isn'2t already there, or return successfully if it is. ^Create a temp file, pass it to some command, then delete the file after the command finishes. #Allocate a new temporary file name LAtomically write a file by first writing it to a tmp file then renaming it. G This prevents concurrent processes from reading half-written files.  None )Generic information about the platform we're running on.  The environment consists of the , and some tool versions. @Get the current environment, including versions of these tools. )Get information about the host platform. !Get the name of this host, using uname. !Get the host architecture, using uname. #Get the host processor name, using uname. %Get the host operating system, using uname. -Get the host operating system release, using uname. 8Get the version of this GHC, or throw an error if it can' t be found. 8Get the version of this GCC, or throw an error if it can' t be found. 7List of tool names and commands to get their versions.  None+An external mailer that can send messages. . Also contains mail server info if needed. 9Send mail via MSMTP, which is a stand-alone SMTP sender. / This might be be easier to set up if you don't have a real MTA installed.  Get it from http:msmtp.sourceforge.net/ 7Send the mail by writing to the stdin of this command.  On many systems the command sendmail# will be aliased to an appropriate F wrapper for whatever Mail Transfer Agent (MTA) you have installed. #An email message that we can send. 7Create a mail with a given from, to, subject and body. > Fill in the date and message id based on the current time. > Valid dates and message ids are needed to prevent the mail ' being bounced by anti-spam systems. %Render an email message as a string. Send a mail message. ''from''$ field. Should be an email address. ''to''$ field. Should be an email address. Subject line. Message body. NoneUse wget% to check if a web-page is gettable. * The page is deleted after downloading. !The given host is reachable with ping. None%Sleep for a given number of seconds. *Sleep for a given number of milliseconds. None?Given a schedule of commands, run them when their time is due. Y Only one command is run at a time. If several commands could be started at a specific ^ moment, then we take the one with the earliest potential start time. If any command throws  an error in the ! monad then the whole loop does.  !"#$%&'()*+,-./01234567 !"#$%&'()*+,-./012345667789:;<=>?@ABCDEFGHIJKLMNOPQRRSTUVWXYZ[\]^_`abcdefghijk l m n l o p q r s t u v w x y z { | } ~                       !"#$%&'()**+,+-+.+/+0+1+2+3+4+5+6+6789:9;<=>?@?A?B?C?D?E?F?G?HIJKLKMKNKOKPQRSTSUSVSWSXSYZ[\]^_`-abcdefghZijklZmnopqrZ[stuZtuvwxyz{|}tu~tutututututututututututututututututututututututututututututututututututututututututututututututututututututututututu              ZZZZZZZbuildbox-2.1.2.2 BuildBox.TimeBuildBox.IO.DirectoryBuildBox.Data.DividableBuildBox.Control.GangBuildBox.Data.ScheduleBuildBox.BuildBuildBox.Data.LogBuildBox.PrettyBuildBox.Data.ComparisonBuildBox.Data.DetailBuildBox.Data.RangeBuildBox.Data.PhysicalBuildBox.Build.TestableBuildBox.Build.BenchmarkBuildBox.Command.SystemBuildBox.Command.DarcsBuildBox.Command.FileBuildBox.Command.EnvironmentBuildBox.Command.MailBuildBox.Command.NetworkBuildBox.Command.SleepBuildBox.Control.Cron!BuildBox.Command.System.InternalsBuildBox.Build.BuildStateBuildBox.Build.BuildErrorBuildBox.Build.BaseBuildBoxreadLocalTimeOfDayAsUTC getStampyTimegetMidnightTodayLocalgetMidnightTodayUTCgetMidnightTomorrowLocalgetMidnightTomorrowUTC lsFilesInlsDirsIntraceFilesFrom Dividabledivide GangState GangKilled GangFinished GangFlushing GangPaused GangRunningGang getGangStatejoinGang flushGang pauseGang resumeGangkillGangwaitForGangStateforkGangActionsScheduleEvent eventName eventWheneventWhenModifiereventLastStartedeventLastEnded EventName WhenModifier WaitUntil ImmediateWhenDailyAfterEveryNeverAlwayssecondminutehourdayearliestEventToStartAteventCouldStartAteventsOfSchedule makeSchedulelookupEventOfSchedulelookupCommandOfScheduleadjustEventOfSchedule BuildStatebuildStateLogSystem buildStateId buildStateSeqbuildStateScratchDirbuildStateDefaultLineLogemptynulltoString fromString<||>>< firstLines lastLinesPrettypprpadRcpadRpadLcpadLblank pprEngInteger pprEngDouble Comparison ComparisonNew comparisonNewcomparisonBaselinecomparisonRecentcomparisonSwingmakeComparisonSizedExeSizeUsed HeapAllocHeapMaxTimed KernelSys KernelCpu KernelWallTotalSysTotalCpu TotalWallDetail DetailSized DetailUsed DetailTimedRangerangeMinrangeAvgrangeMax makeRange flattenRange BuildError ErrorNeedsErrorCheckFailed ErrorIOErrorErrorSystemCmdFailed buildErrorCmdbuildErrorCodebuildErrorStdoutbuildErrorStderr ErrorOtherBytesSecondsBuildrunBuild runBuildPrintrunBuildWithStaterunBuildPrintWithState successfullythrowcatchneedsiowhenMoutoutLnoutBlankoutLineoutLINETestabletestcheck checkFalse outCheckOkoutCheckFalseOk BenchResultbenchResultNamebenchResultIterationbenchResultTimebenchResultValue Benchmark benchmarkNamebenchmarkSetupbenchmarkCommandbenchmarkCheck runBenchmarkiterateBenchmark timeBuild logSystemsystemsystemqssystemssystemqsesystem sesystemq systemTee systemTeeLog ssystemTee systemTeeIOsystemTeeLogIO DarcsPatchdarcsTimestamp darcsAuthor darcsComment EmailAddress DarcsPathchangeschangesN changesAfterPropFile FileEmptyHasDirHasFile HasExecutableinDir inScratchDir clobberDir ensureDir withTempFileatomicWriteFilePlatformplatformHostNameplatformHostArchplatformHostProcessorplatformHostOSplatformHostRelease EnvironmentenvironmentPlatformenvironmentVersionsgetEnvironmentWithgetHostPlatform getHostName getHostArchgetHostProcessor getHostOSgetHostRelease getVersionGHC getVersionGCCMailer MailerMSMTP mailerPortMailerSendmail mailerPathmailerExtraFlagsMailmailFrommailTo mailSubjectmailTime mailTimeZone mailMessageIdmailBodycreateMailWithCurrentTime renderMailsendMailWithMailer PropNetwork UrlGettable HostReachablesleepmsleepcronLoop time-1.4.0.1Data.Time.LocalTime.LocalTime LocalTimeData.Time.Clock.UTCUTCTimeData.Time.Format formatTimeformatCharacter FormatTimeData.Time.Format.Parse readsTimereadTime parseTime buildTime ParseTimeutcToLocalZonedTime getZonedTimezonedTimeToUTCutcToZonedTimelocalTimeToUT1ut1ToLocalTimelocalTimeToUTCutcToLocalTimelocalTimeOfDaylocalDay zonedTimeZonezonedTimeToLocalTime ZonedTimeData.Time.LocalTime.TimeOfDaytimeOfDayToDayFractiondayFractionToTimeOfDaytimeOfDayToTimetimeToTimeOfDaylocalToUTCTimeOfDayutcToLocalTimeOfDaymakeTimeOfDayValidmiddaymidnighttodSectodMintodHour TimeOfDayData.Time.LocalTime.TimeZonegetCurrentTimeZone getTimeZoneutctimeZoneOffsetStringtimeZoneOffsetString'hoursToTimeZoneminutesToTimeZone timeZoneNametimeZoneSummerOnlytimeZoneMinutesTimeZoneData.Time.ClockgetCurrentTimeData.Time.Clock.UTCDiff diffUTCTime addUTCTime utctDayTimeutctDayNominalDiffTimeData.Time.Calendar.GregorianaddGregorianYearsRollOveraddGregorianYearsClipaddGregorianMonthsRollOveraddGregorianMonthsClipgregorianMonthLength showGregorianfromGregorianValid fromGregorian toGregorianData.Time.Calendar.OrdinalDate isLeapYearData.Time.Calendar.DaysdiffDaysaddDaystoModifiedJulianDayModifiedJulianDayDayData.Time.Calendar.PrivateNumericPadOptionData.Time.Clock.ScalepicosecondsToDiffTimesecondsToDiffTimegetModJulianDate ModJulianDate UniversalTimeDiffTimebaseGHC.Base. dropDotPaths$fDividableFloat$fDividableIntegergangLoop gangThreadsgangThreadsAvailable gangStategangActionsRunninggangThreadsRunninggangLoop_withWorker$fReadNominalDiffTimestreamIn Data.MaybeNothing streamOuts hGetLineNLGHC.IO.Handle.TexthGetLine streamIn'uponMmkPSmkBigPSStringpretty-1.1.1.0Text.PrettyPrint.HughesPJvcat $fPretty[] $fPretty[]0$fPrettyUTCTime$fPrettyInteger $fPrettyInt $fPrettyFloat $fPrettyDoc fullRender renderStylerenderstylefsepfcatcatsep<+><>$+$$$ punctuatehangnesthsephcatbracesbracketsparens doubleQuotesquotesrationaldoublefloatintegerintrbracelbracerbracklbrackrparenlparenequalsspacecoloncommasemiisEmpty zeroWidthText sizedTextptexttextcharDocChrStrPStr TextDetailsribbonsPerLine lineLengthmodeStylePageMode ZigZagModeLeftMode OneLineModeMode$fPrettyComparison $fPrettySized $fPrettyUsed $fPrettyTimed$fFunctorRange $fPrettyRange$fShowBuildError$fPrettyBuildError$fErrorBuildError $fPrettyBytes $fNumBytes$fDividableBytes $fRealBytes$fPrettySeconds $fNumSeconds$fDividableSeconds $fRealSeconds getUniqueId Control.MonadwhenGHC.IO.Exception ExitFailureExitCodedebugtrace slurpChan System.Exit exitSuccess exitFailureexitWith ExitSuccessdarcs splitPatches$fShowDarcsPatchdirectory-1.2.0.0System.DirectoryremoveDirectoryRecursive newTempFile$fTestablePropFile$fPrettyPlatform$fPrettyEnvironmentURLHostName$fTestablePropNetwork