<Ax      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvw Safe!"%&"Why did the computation terminate?xHA 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.y$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.zStart 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.) x yz{|}~ ~ x   yz{|}~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 .  .  Safe**Apply the given color to the given string.+5Apply the given background color to the given string.,>Apply the terminal's default highlighting to the given string.-%Output the given string in bold font..Underline the given string.3Escape sequence to reset formatting back to normal.An escape character.!"#$%&'()*+,-.!"#$%&'()*+,-. !"#$%&'()*+,-. None/0Perform a file operation in binary or text mode?0Create 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.1Get the current global shell environment, including standard input, output and error handles. Only safe to call within a computation lifted into   by .2KRun 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.3=Perform the given computation and return its standard output.4<Perform the given computation and return its standard error.5YPerform the given computation and return its standard output and error, in that order.6PLift a pure function to a computation over standard input/output. Similar to .7LLift a shell computation to a function over stdin and stdout. Similar to .85Get the contents of the computation's standard input.99Write 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.<Propagate an explicit  ExitResult through the computation./0123456789:;<^ ~/0123456789:;</0123456789:;< 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.ACopy 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.B"Perform a computation over a file.C)Perform a computation over a binary file.D&Open a file, returning a handle to it.E5Open a file in binary mode, returning a handle to it. =>?@ABCDE=>?@ABCDE =>?@ABCDE NoneF"Get the current working directory.GRecursively copy a directory. If the target is a directory that already exists, the source directory is copied into that directory using its current name.HRecursively 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.ILike H, but discards its result.JPerform 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.KLike  forEachFile! but only performs a side effect.L'List the contents of a directory, sans . and ...MRCreate a directory. Optionally create any required missing directories as well.N@Recursively remove a directory. Follows symlinks, so be careful.O,Do something with the user's home directory.PJPerform an action with the user's home directory as the working directory.Q9Do something with the given application's data directory.RUDo something with the given application's data directory as the working directory.SaExecute a command in the given working directory, then restore the previous working directory.T(Does the given path lead to a directory?U#Does the given path lead to a file?FGHIJKLMNOPQRSTUFGHIJKLMNOPQRSTUFGHIJKLMNOPQRSTU None VWrite a string to a handle.W2Write a string to a handle, followed by a newline.XClose a handle.YFlush a handle.Z#Read a line of input from a handle.[.Lazily read all remaining input from a handle.\Read n bytes from a handle.]6Read a line of input from a handle and return it as a .^:Read all remaining input from a handle and return it as a ._Write a & to a handle. Newline is not appended. VWXYZ[\]^_ VWXYZ[\]^_ VWXYZ[\]^_None`gCreate a temp directory in the standard system temp directory, do something with it, then remove it.aTCreate a temp directory in given directory, do something with it, then remove it.bbCreate a temp file in the standard system temp directory, do something with it, then remove it.cbCreate a temp file in the standard system temp directory, do something with it, then remove it.`abc`abc`abcNoneDR d 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".e9Get the complete environment for the current computation.f(The executable's command line arguments.g:Run a computation with the given environment variable set.h<Run a computation with the given environment variable unset.i\Get the value of an environment variable. Returns Nothing if the variable doesn't exist.jdGet the value of an environment variable. Returns the empty string if the variable doesn't exist.k'Run a command with elevated privileges.lpPerforms a command inside a temporary directory. The directory will be cleaned up after the command finishes.mpPerforms a command inside a temporary directory. The directory will be cleaned up after the command finishes.n=Get the standard input, output and error handle respectively.o=Get the standard input, output and error handle respectively.p=Get the standard input, output and error handle respectively.defghijklmnop  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopq  2d34567 ghijf k01e<GFLMNSTOPQRJKHIU?@A=>BCDE/bc`almYXnopVW9:;8Z[!"#$%&'()*+,-.\_]^defghijklmnopNoneqA 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 sUed 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.rCreate a future value.sWait for a future value.t0Check whether a future value has arrived or not.uNPerform the given computations in parallel. The race condition warning for qO when modifying environment variables or using relative paths still applies.vLike u!, but discards any return values.wBreak 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). qrstuvwqrstuvwqrstuvwqrstuvw !"#$%&'()*+,-./ 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 f g h i j k l m nopqrstuvwxyz{|}~y         &shellmate-0.3.2-DPIBzXDRPLW2YEWfb2OchV Control.ShellControl.Shell.ConcurrentControl.Shell.InternalControl.Shell.ControlCMguardwhenunlessControl.Shell.ColorControl.Shell.BaseControl.Shell.FileControl.Shell.DirectoryControl.Shell.HandleControl.Shell.TempbaseGHC.IO.Handle.TypesHandleControl.Monad.IO.ClassliftIOMonadIO GHC.IO.IOMode ReadWriteMode AppendMode WriteModeReadModeIOMode ExitReasonSuccessFailureShellEnvenvStdIn envStdOut envStdErr envWorkDir envEnvVars unsafeLiftIOshellrunShrunexit|>tryGuardResultassertorElseColorBlackRedGreenYellowBluePurpleMagentaWhitecolor background highlightbold underlineFileModeabsPathshellEnvshell_capture captureStdErrcapture2streamliftstdinechoecho_ask joinResultinputoutputrmmvcpwithFilewithBinaryFileopenFileopenBinaryFilepwdcpdirforEachDirectoryforEachDirectory_ forEachFile forEachFile_lsmkdirrmdirwithHomeDirectoryinHomeDirectorywithAppDirectoryinAppDirectory inDirectory isDirectoryisFilehPutStr hPutStrLnhClosehFlushhGetLine hGetContents hGetBytes hGetByteLinehGetByteContents hPutByteswithTempDirectorywithCustomTempDirectory withTempFilewithCustomTempFile 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=<< MonadPlusmzeromplusnormalesccolorNum takeEnvLockreleaseEnvLock setShellEnv System.IOinteract BinaryModeTextMode 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 ByteStringStringinsertdeleteFinalizerHandle