!5      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ SafeO shellmate*Apply the given color to the given string.P shellmate5Apply the given background color to the given string.Q shellmate>Apply the terminal's default highlighting to the given string.R shellmate%Output the given string in bold font.S shellmateUnderline the given string. shellmate3Escape sequence to reset formatting back to normal. shellmateAn escape character.FGHIJKLMNOPQRSNone"#&'-T shellmate"Why did the computation terminate? shellmateHA step in a pipeline: either a shell computation or an external process.W shellmatePA shell command: either an IO computation or a pipeline of at least one step.X shellmateA shell environment: consists of the current standard input, output and error handles used by the computation, as well as the current working directory and set of environment variables. shellmate$A command name plus a ProcessHandle._ shellmateLift an IO computation into a shell. The lifted computation is not thread-safe, and should thus absolutely not use environment variables, relative paths or standard input/output.` shellmateRun a shell computation. If part of the computation fails, the whole computation fails. The computation's environment is initially that of the whole process. shellmateStart a pipeline step. shellmatesPair up pipe steps with corresponding environments, ensuring that each step is connected to the next via a pipe. shellmate)Terminate a pid, be it process or thread. shellmate|Wait for all processes in the given list. If a process has failed, its error message is returned and the rest are killed.b shellmateExecute an external command. No globbing, escaping or other external shell magic is performed on either the command or arguments. The program's stdout will be written to stdout.c shellmate#Terminate the program successfully.d shellmateConnect the standard output of the first argument to the standard input of the second argument, and run the two computations in parallel. shellmate+Run a computation in the given environment. shellmateGet the current environment.e shellmateAttempt to run a computation. If the inner computation fails, the outer computations returns its error message, otherwise its result is returned.TUVWXYZ[\]^_`abcded5NoneHV=g shellmate5The type of the guard's return value, if it succeeds.h shellmatePerform a Shell computation; if the computation succeeds but returns a false-ish value, the outer Shell computation fails with the given error message.i shellmate{Attempt to run the first command. If the first command fails, run the second. Forces serialization of the first command.j shellmatePerform a Shell computation; if the computation succeeds but returns a false-ish value, the outer Shell computation fails. Corresponds to .k shellmatePerform the given computation if the given guard passes, otherwise do nothing. The guard raising an error counts as failure as far as this function is concerned. Corresponds to  .l shellmatePerform the given computation if the given guard fails, otherwise do nothing. The guard raising an error counts as failure as far as this function is concerned. Corresponds to  .. !"#$*+,-./01432fghijkl NoneYm shellmate0Perform a file operation in binary or text mode?p shellmateCreate an absolute path from the environment and a potentially relative path. Has no effect if the path is already absolute. shellmate!Take the global environment lock. shellmate$Release the global environment lock. shellmateSet the global shell environment to the one of the current computation. Returns the current global environment. Should never, ever, be called without holding the global environment lock.q shellmateGet the current global shell environment, including standard input, output and error handles. Only safe to call within a computation lifted into W by  .r shellmateKRun a shell computation and return its result. If the computation calls c[, the return value will be undefined. If the computation fails, an error will be thrown.s shellmate=Perform the given computation and return its standard output.t shellmate<Perform the given computation and return its standard error.u shellmateYPerform the given computation and return its standard output and error, in that order.v shellmateuPerform the given computation and return its standard output and error, as well as its exit reason, in that order.w shellmatePLift a pure function to a computation over standard input/output. Similar to .x shellmateLLift a shell computation to a function over stdin and stdout. Similar to .y shellmate5Get the contents of the computation's standard input.z shellmate9Write a string to standard output, followed by a newline.{ shellmate?Write a string to standard output, without appending a newline.| shellmate(Read a line of text from standard input.} shellmatePropagate an explicit  ExitResult through the computation.`      TUVWXYZ[\]^_`abcdemnopqrstuvwxyz{|} Noned ~ shellmateWrite a string to a handle. shellmate2Write a string to a handle, followed by a newline. shellmateClose a handle. shellmateFlush a handle. shellmate Is the handle ready for reading? shellmate+Set the buffering mode of the given handle. shellmate+Get the buffering mode of the given handle. shellmate#Read a line of input from a handle. shellmate.Lazily read all remaining input from a handle. shellmateRead n bytes from a handle. shellmate6Read a line of input from a handle and return it as a . shellmate:Read all remaining input from a handle and return it as a . shellmateWrite a & to a handle. Newline is not appended. ~ Nonen  shellmateLazily read a file. shellmateLazily write a file. shellmateRemove a file. shellmateoRename a file or directory. If the target is a directory, then the source will be moved into that directory. shellmateCopy a file. Fails if the source is a directory. If the target is a directory, the source file is copied into that directory using its current name. shellmate"Perform a computation over a file. shellmate)Perform a computation over a binary file. shellmate&Open a file, returning a handle to it. shellmate5Open a file in binary mode, returning a handle to it.)('&%None shellmate"Get the current working directory. shellmateRecursively copy a directory. If the target is a directory that already exists, the source directory is copied into that directory using its current name. shellmateRecursively perform an action on each subdirectory of the given directory. The path passed to the callback is relative to the given directory. The action will *not* be performed on the given directory itself. shellmateLike , but discards its result. shellmatePerform an action on each file in the given directory. This function will traverse any subdirectories of the given as well. File paths are given relative to the given directory; the current working directory is not affected. shellmateLike  forEachFile! but only performs a side effect. shellmate'List the contents of a directory, sans . and ... shellmateRCreate a directory. Optionally create any required missing directories as well. shellmate@Recursively remove a directory. Follows symlinks, so be careful. shellmate,Do something with the user's home directory. shellmateJPerform an action with the user's home directory as the working directory. shellmate9Do something with the given application's data directory. shellmateUDo something with the given application's data directory as the working directory. shellmateaExecute a command in the given working directory, then restore the previous working directory. shellmate(Does the given path lead to a directory? shellmate#Does the given path lead to a file?NoneN shellmategCreate a temp directory in the standard system temp directory, do something with it, then remove it. shellmateTCreate a temp directory in given directory, do something with it, then remove it. shellmatebCreate a temp file in the standard system temp directory, do something with it, then remove it. shellmatebCreate a temp file in the standard system temp directory, do something with it, then remove it.NoneHVh  shellmate Convert an T into a . Successful termination yields the empty string, while abnormal termination yields the termination error message. If the program terminaged abnormally but without an error message - i.e. the error message is empty string - the error message will be shown as "abnormal termination". shellmate9Get the complete environment for the current computation. shellmate(The executable's command line arguments. shellmate:Run a computation with the given environment variable set. shellmate<Run a computation with the given environment variable unset. shellmate\Get the value of an environment variable. Returns Nothing if the variable doesn't exist. shellmatedGet the value of an environment variable. Returns the empty string if the variable doesn't exist. shellmate'Run a command with elevated privileges. shellmatepPerforms a command inside a temporary directory. The directory will be cleaned up after the command finishes. shellmatepPerforms a command inside a temporary directory. The directory will be cleaned up after the command finishes. shellmate=Get the standard input, output and error handle respectively. shellmate=Get the standard input, output and error handle respectively. shellmate=Get the standard input, output and error handle respectively.  !"#$)('&%*+,-./01432     FGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~WTUV`rdstuvwxeicfghjkl XYZ[\]^b_pq}amno)('&% ~z{|yFGHIJKLMNOPQRS !"#$*+,-./01432None% shellmate\Daemonize a shellmate computation. This should be the last thing a computation does, as this function will terminate the parent computation. In short, daemonizing a computation involves setting the file creation mask to 0, closing standard input, output and error file descriptors, blocking sighup and changing the working directory to /.On Windows without Cygwin,  daemonizeM is a no-op. Consider running any program intended to be deamonized using START /B your_app6, or better yet, rewriting it as a Windows service.None"  shellmate3Set the mode (permissions, etc.) of the given file. shellmateGet the mode of the given file. shellmate&Get the currently effective user name. shellmate;Get the list of groups associated with the current process. shellmate Set the owner of the given file. shellmate Set the group of the given file. shellmate*Set the owner and group of the given file. shellmate Get the owner of the given file. shellmate Get the group of the given file. shellmate*Get the owner and group of the given file. shellmate+Set the file creation mask of this process. 56789:;<=>?@ABCDE 65EDCB:A@?9>=<8;7None٣  shellmateA future is a computation which is run in parallel with a program's main thread and which may at some later point finish and return a value.BNote that future computations are killed when their corresponding FutureI is garbage collected. This means that a future should *always* be Ued at some point or otherwise kept alive, to ensure that the computation finishes.0Note that all any code called in a future using _ must refrain from using environment variables, standard input/output, relative paths and the current working directory, in order to avoid race conditions. Code within the W monad, code imported using  / and external processes spawned from within W is perfectly safe. shellmateHOnly used to have something reliable to attach the futures' weakrefs to. shellmateCreate a future value. shellmateWait for a future value. shellmate0Check whether a future value has arrived or not. shellmateNPerform the given computations in parallel. The race condition warning for O when modifying environment variables or using relative paths still applies. shellmateLike !, but discards any return values. shellmateBreak a list into chunks. This is quite useful for when performing *every* computation in parallel is too much. For instance, to download a list of files three at a time, one would do /mapM_ (parallel_ downloadFile) (chunks 3 files). shellmateRun a computation in a separate thread. If the thread throws an error, it will simply die; the error will not propagate to its parent thread. shellmateRun a computation in a separate thread, with its standard input and output provided by the first and second handles returned respectively. The handles are line buffered by default. shellmateLike -, but adds a third handle for standard error. shellmateTerminate a thread spawned by .   ! " # $ % & ' ( ) * + , -./.0.123456789:;:<:=:>?@?A?B?C?DEFGHIJKLMNOPQRSQRTQRUQRVQRWQRXQRYQRZQR[QR\QR]QR^QR_QR`QRaQRbQRcdefghijklmnopqrstuvvwxyz{|}~            !"#$%&'()*+,-./01234(shellmate-0.3.4.3-Lqz7g17m5P08e01VXjimbj Control.ShellControl.Shell.ConcurrentControl.Shell.PosixControl.Shell.ColorControl.Shell.InternalControl.Shell.ControlCMguardwhenunlessControl.Shell.BaseControl.Shell.HandleControl.Shell.FileControl.Shell.DirectoryControl.Shell.TempControl.Shell.DaemonbaseGHC.Basefail>>=>>fmapreturnjoinMonadFunctorGHC.IO.Handle.TypesHandleControl.Monad.IO.ClassliftIOMonadIO Control.Monadmfilter<$!> replicateM_ replicateMfoldM_foldM zipWithM_zipWithM mapAndUnzipMforever<=<>=>filterMData.TraversableforMsequencemapM GHC.Conc.SyncThreadIdSystem.Posix.TypesCModeBlockBuffering LineBuffering NoBuffering BufferMode Data.Foldablemsum sequence_forM_mapM_ GHC.IO.IOMode ReadWriteMode AppendMode WriteModeReadModeIOMode Data.FunctorvoidapliftM5liftM4liftM3liftM2liftM=<<mplusmzero MonadPlus unix-2.7.2.2System.Posix.Files.CommonintersectFileModesunionFileModes accessModes otherModes groupModes ownerModes stdFileModeotherExecuteModeotherWriteMode otherReadModegroupExecuteModegroupWriteMode groupReadModeownerExecuteModeownerWriteMode ownerReadMode nullFileModeColorBlackRedGreenYellowBluePurpleMagentaWhitecolor background highlightbold underline ExitReasonSuccessFailureShellEnvenvStdIn envStdOut envStdErr envWorkDir envEnvVars unsafeLiftIOshellrunShrunexit|>tryGuardResultassertorElseFileMode BinaryModeTextModeabsPathshellEnvshell_capture captureStdErrcapture2capture3streamliftstdinechoecho_ask joinResulthPutStr hPutStrLnhClosehFlushhReady hSetBuffering hGetBufferinghGetLine hGetContents hGetBytes hGetByteLinehGetByteContents hPutBytesinputoutputrmmvcpwithFilewithBinaryFileopenFileopenBinaryFilepwdcpdirforEachDirectoryforEachDirectory_ forEachFile forEachFile_lsmkdirrmdirwithHomeDirectoryinHomeDirectorywithAppDirectoryinAppDirectory inDirectory isDirectoryisFilewithTempDirectorywithCustomTempDirectory withTempFilewithCustomTempFile exitString getShellEnvcmdlinewithEnv withoutEnv lookupEnvgetEnvsudoinTempDirectoryinCustomTempDirectorygetStdIn getStdOut getStdErr daemonizeGroupUser setFileMode getFileModegetCurrentUsergetCurrentGroupssetOwnersetGroup setOwnershipgetOwnergetGroup getOwnershipsetFileCreationMaskFuturefutureawaitcheckparallel parallel_chunksforkIOfork2fork3 killThreadnormalescPipeStepPidrunStepmkEnvskillPidwaitPidsinEnv takeEnvLockreleaseEnvLock setShellEnv System.IOinteractGHC.IOFilePathfilepath-1.4.2.1System.FilePath.Posix makeRelativedropTrailingPathSeparator normalise isAbsolute isRelative makeValidisValid equalFilePathjoinPathsplitDirectories splitPathcombinereplaceDirectory takeDirectoryaddTrailingPathSeparatorhasTrailingPathSeparatorreplaceBaseName takeBaseName takeFileName dropFileNamereplaceFileName splitFileNameisDrivehasDrive dropDrive takeDrive joinDrive splitDrivereplaceExtensionstakeExtensionsdropExtensionssplitExtensionsstripExtension isExtensionOf hasExtension addExtension dropExtension<.>replaceExtension-<.> takeExtensionsplitExtension getSearchPathsplitSearchPathisExtSeparator extSeparatorisSearchPathSeparatorsearchPathSeparatorisPathSeparatorpathSeparators pathSeparatorbytestring-0.10.8.2Data.ByteString.Internal ByteStringmakeWritableRecursiveStringFinalizerHandle