diz      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxy Safe!"%&"Why did the computation terminate?zHA step in a pipeline: either a shell computation or an external process. PA shell command: either an IO computation or a pipeline of at least one step. A 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.{$A command name plus a ProcessHandle.Lift 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.Run a shell computation. If part of the computation fails, the whole computation fails. The computation's environment is initially that of the whole process.|Start a pipeline step.}sPair up pipe steps with corresponding environments, ensuring that each step is connected to the next via a pipe.~)Terminate a pid, be it process or thread.|Wait for all processes in the given list. If a process has failed, its error message is returned and the rest are killed.Execute 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.#Terminate the program successfully.Connect the standard output of the first argument to the standard input of the second argument, and run the two computations in parallel.+Run a computation in the given environment.Get the current environment.Attempt to run a computation. If the inner computation fails, the outer computations returns its error message, otherwise its result is returned.) z {|}~  z   {|}~5SafeDR5The type of the guard's return value, if it succeeds.Perform a Shell computation; if the computation succeeds but returns a false-ish value, the outer Shell computation fails with the given error message.{Attempt to run the first command. If the first command fails, run the second. Forces serialization of the first command.Perform a Shell computation; if the computation succeeds but returns a false-ish value, the outer Shell computation fails. Corresponds to .Perform 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 . Perform 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 .  .  None!0Perform a file operation in binary or text mode?$Create an absolute path from the environment and a potentially relative path. Has no effect if the path is already absolute.!Take the global environment lock.$Release the global environment lock.Set 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.%Get the current global shell environment, including standard input, output and error handles. Only safe to call within a computation lifted into   by .&KRun a shell computation and return its result. If the computation calls [, the return value will be undefined. If the computation fails, an error will be thrown.'=Perform the given computation and return its standard output.(<Perform the given computation and return its standard error.)YPerform the given computation and return its standard output and error, in that order.*PLift a pure function to a computation over standard input/output. Similar to .+LLift a shell computation to a function over stdin and stdout. Similar to .,5Get the contents of the computation's standard input.-9Write a string to standard output, followed by a newline..?Write a string to standard output, without appending a newline./(Read a line of text from standard input.0Propagate an explicit  ExitResult through the computation.!"#$%&'()*+,-./0^ !"#$%&'()*+,-./0!"#$%&'()*+,-./0 None 1Write a string to a handle.22Write a string to a handle, followed by a newline.3Close a handle.4Flush a handle.5#Read a line of input from a handle.6.Lazily read all remaining input from a handle.7Read n bytes from a handle.86Read a line of input from a handle and return it as a .9:Read all remaining input from a handle and return it as a .:Write a & to a handle. Newline is not appended. 123456789: 123456789: 123456789: None ;Lazily read a file.<Lazily write a file.=Remove a file.>oRename a file or directory. If the target is a directory, then the source will be moved into that directory.?Copy 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.@"Perform a computation over a file.A)Perform a computation over a binary file.B&Open a file, returning a handle to it.C5Open a file in binary mode, returning a handle to it. ;<=>?@ABC;<=>?@ABC ;<=>?@ABC NoneD"Get the current working directory.ERecursively copy a directory. If the target is a directory that already exists, the source directory is copied into that directory using its current name.FRecursively 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.GLike F, but discards its result.HPerform 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.ILike  forEachFile! but only performs a side effect.J'List the contents of a directory, sans . and ...KRCreate a directory. Optionally create any required missing directories as well.L@Recursively remove a directory. Follows symlinks, so be careful.M,Do something with the user's home directory.NJPerform an action with the user's home directory as the working directory.O9Do something with the given application's data directory.PUDo something with the given application's data directory as the working directory.QaExecute a command in the given working directory, then restore the previous working directory.R(Does the given path lead to a directory?S#Does the given path lead to a file?DEFGHIJKLMNOPQRSDEFGHIJKLMNOPQRSDEFGHIJKLMNOPQRS NoneTgCreate a temp directory in the standard system temp directory, do something with it, then remove it.UTCreate a temp directory in given directory, do something with it, then remove it.VbCreate a temp file in the standard system temp directory, do something with it, then remove it.WbCreate a temp file in the standard system temp directory, do something with it, then remove it.TUVWTUVWTUVWSafea*Apply the given color to the given string.b5Apply the given background color to the given string.c>Apply the terminal's default highlighting to the given string.d%Output the given string in bold font.eUnderline the given string.3Escape sequence to reset formatting back to normal.An escape character.XYZ[\]^_`abcdeXYZ[\]^_`abcde XYZ[\]^_`abcdeNoneDR f Convert an  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".g9Get the complete environment for the current computation.h(The executable's command line arguments.i:Run a computation with the given environment variable set.j<Run a computation with the given environment variable unset.k\Get the value of an environment variable. Returns Nothing if the variable doesn't exist.ldGet the value of an environment variable. Returns the empty string if the variable doesn't exist.m'Run a command with elevated privileges.npPerforms a command inside a temporary directory. The directory will be cleaned up after the command finishes.opPerforms a command inside a temporary directory. The directory will be cleaned up after the command finishes.p=Get the standard input, output and error handle respectively.q=Get the standard input, output and error handle respectively.r=Get the standard input, output and error handle respectively.fghijklmnopqr  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrs  &f'()*+ ijklh m$%g0EDJKLQRMNOPHIFGS=>?;<@ABC!"#VWTUno43pqr12-./,56XYZ[\]^_`abcde7:89fghijklmnopqrNonesA 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 uUed 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   monad, code imported using / and external processes spawned from within   is perfectly safe.HOnly used to have something reliable to attach the futures' weakrefs to.tCreate a future value.uWait for a future value.v0Check whether a future value has arrived or not.wNPerform the given computations in parallel. The race condition warning for sO when modifying environment variables or using relative paths still applies.xLike w!, but discards any return values.yBreak 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). stuvwxystuvwxystuvwxystuvwxy !"#$%&'()*+,-./ 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e fghijklmnopqrstuvwxyz{|}~{       (shellmate-0.3.2.1-KzprfKRE98gImvcS1ajFmH Control.ShellControl.Shell.ConcurrentControl.Shell.InternalControl.Shell.ControlCMguardwhenunlessControl.Shell.BaseControl.Shell.HandleControl.Shell.FileControl.Shell.DirectoryControl.Shell.TempControl.Shell.ColorbaseGHC.IO.Handle.TypesHandleControl.Monad.IO.ClassliftIOMonadIO GHC.IO.IOMode ReadWriteMode AppendMode WriteModeReadModeIOMode ExitReasonSuccessFailureShellEnvenvStdIn envStdOut envStdErr envWorkDir envEnvVars unsafeLiftIOshellrunShrunexit|>tryGuardResultassertorElseFileMode BinaryModeTextModeabsPathshellEnvshell_capture captureStdErrcapture2streamliftstdinechoecho_ask joinResulthPutStr hPutStrLnhClosehFlushhGetLine hGetContents hGetBytes hGetByteLinehGetByteContents hPutBytesinputoutputrmmvcpwithFilewithBinaryFileopenFileopenBinaryFilepwdcpdirforEachDirectoryforEachDirectory_ forEachFile forEachFile_lsmkdirrmdirwithHomeDirectoryinHomeDirectorywithAppDirectoryinAppDirectory inDirectory isDirectoryisFilewithTempDirectorywithCustomTempDirectory withTempFilewithCustomTempFileColorBlackRedGreenYellowBluePurpleMagentaWhitecolor background highlightbold underline exitString getShellEnvcmdlinewithEnv withoutEnv lookupEnvgetEnvsudoinTempDirectoryinCustomTempDirectorygetStdIn getStdOut getStdErrFuturefutureawaitcheckparallel parallel_chunksPipeStepPidrunStepmkEnvskillPidwaitPidsinEnvProcInternalLiftPipeBindGetEnvInEnvTryDoneFailPIDTID $fMonadShell$fApplicativeShell$fFunctorShell $fGuardShell $fGuardBool $fGuardMaybeGHC.BasejoinMonad>>=>>returnfailFunctorfmapData.TraversablemapMsequence Control.Monadmfilter<$!> replicateM_ replicateMfoldM_foldM zipWithM_zipWithM mapAndUnzipMforever<=<>=>filterMforM Data.Foldablemsum sequence_forM_mapM_ Data.FunctorvoidapliftM5liftM4liftM3liftM2liftM=<< MonadPlusmzeromplus takeEnvLockreleaseEnvLock setShellEnv System.IOinteract globalEnvLock globalEnv$fMonadIOShellGHC.IOFilePathfilepath-1.4.1.0System.FilePath.Posix makeRelative normalise isAbsolute isRelative makeValidisValid equalFilePathjoinPathsplitDirectories splitPathcombinereplaceDirectory takeDirectorydropTrailingPathSeparatoraddTrailingPathSeparatorhasTrailingPathSeparatorreplaceBaseName takeBaseName takeFileName dropFileNamereplaceFileName splitFileNameisDrivehasDrive dropDrive takeDrive joinDrive splitDrivereplaceExtensionstakeExtensionsdropExtensionssplitExtensionsstripExtension hasExtension addExtension dropExtension<.>replaceExtension-<.> takeExtensionsplitExtension getSearchPathsplitSearchPathisExtSeparator extSeparatorisSearchPathSeparatorsearchPathSeparatorisPathSeparatorpathSeparators pathSeparatorbytestring-0.10.8.1Data.ByteString.Internal ByteStringnormalesccolorNumStringinsertdeleteFinalizerHandle