$ j      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghi SafeOTA  (Shell a) is a protected stream of a's with side effectsUse a   j to reduce the stream of a's produced by a Use a   to reduce the stream of a's produced by a  Run a , to completion, discarding any unused values!Run a  to completion, king any unused values"Convert a list to a $ that emits each element of the list$9Shell forms a semiring, this is the closest approximation !"#$%&'()*+,   !"  !"  !"#$%&'()*+,NoneDIR5-,A fully backtracking pattern that parses an 'a' from some .Match a - against a ( input, returning all possible solutionsThe - must match the entire /Match any charactermatch anyChar "1""1"match anyChar """"0Matches the end of input match eof "1"[] match eof ""[()]1 Synonym for /26Match any character that satisfies the given predicatematch (satisfy (== '1')) "1""1"match (satisfy (== '2')) "1"""3Match a specific charactermatch (char '1') "1""1"match (char '2') "1"""4(Match any character except the given onematch (notChar '2') "1""1"match (notChar '1') "1"""5Match a specific stringmatch (text "123") "123"["123"]You can also omit the 5 function if you enable the OverloadedStrings extension:match "123" "123"["123"]61Match a specific string in a case-insensitive wayThis only handles ASCII stringsmatch (asciiCI "abc") "ABC"["ABC"]7%Match any one of the given charactersmatch (oneOf "1a") "1""1"match (oneOf "2a") "1"""8.Match anything other than the given charactersmatch (noneOf "2a") "1""1"match (noneOf "1a") "1"""9Match a whitespace charactermatch space " "" "match space "1""":(Match zero or more whitespace charactersmatch spaces " "[" "]match spaces ""[""];'Match one or more whitespace charactersmatch spaces1 " "[" "]match spaces1 ""[]<Match the tab character ('t')match tab "\t""\t" match tab " """=Match the newline character ('n')match newline "\n""\n"match newline " """>Matches a carriage return ('r') followed by a newline ('n')match crlf "\r\n"["\r\n"]match crlf "\n\r"[]?Match an uppercase lettermatch upper "A""A"match upper "a"""@Match a lowercase lettermatch lower "a""a"match lower "A"""AMatch a letter or digitmatch alphaNum "1""1"match alphaNum "a""a"match alphaNum "A""A"match alphaNum "."""BMatch a lettermatch letter "A""A"match letter "a""a"match letter "1"""C Match a digitmatch digit "1""1"match digit "a"""DMatch a hexadecimal digitmatch hexDigit "1""1"match hexDigit "A""A"match hexDigit "a""a"match hexDigit "g"""EMatch an octal digitmatch octDigit "1""1"match octDigit "9"""F Match an unsigned decimal numbermatch decimal "123"[123]match decimal "-123"[]G9Transform a numeric parser to accept an optional leading '+' or '-' signmatch (signed decimal) "+123"[123]match (signed decimal) "-123"[-123]match (signed decimal) "123"[123]H(H p) succeeds if p fails and fails if p succeedsmatch (invert "A") "A"[]match (invert "A") "B"[()]IMatch a l , but return match (once (char '1')) "1"["1"]match (once (char '1')) ""[]J(Use this to match the prefix of a stringmatch "A" "ABC"[]match (prefix "A") "ABC"["A"]K(Use this to match the suffix of a stringmatch "C" "ABC"[]match (suffix "C") "ABC"["C"]L*Use this to match the interior of a stringmatch "B" "ABC"[]match (has "B") "ABC"["B"]M;Match the entire string if it begins with the given pattern;This returns the entire string, not just the matched prefix&match (begins "A" ) "ABC"["ABC"]&match (begins ("A" *> pure "1")) "ABC"["1BC"]N9Match the entire string if it ends with the given pattern;This returns the entire string, not just the matched prefix$match (ends "C" ) "ABC"["ABC"]$match (ends ("C" *> pure "1")) "ABC"["AB1"]O8Match the entire string if it contains the given pattern=This returns the entire string, not just the interior pattern(match (contains "B" ) "ABC"["ABC"](match (contains ("B" *> pure "1")) "ABC"["A1C"]P2Parse 0 or more occurrences of the given charactermatch (star anyChar) "123"["123"]match (star anyChar) ""[""] See also: _Q2Parse 1 or more occurrences of the given charactermatch (plus digit) "123"["123"]match (plus digit) ""[] See also: `R}Patterns that match multiple times are greedy by default, meaning that they try to match as many times as possible. The R> combinator makes a pattern match as few times as possiblefThis only changes the order in which solutions are returned, by prioritizing less greedy solutions.match (prefix (selfless (some anyChar))) "123"["1","12","123"].match (prefix (some anyChar) ) "123"["123","12","1"]SCApply the patterns in the list in order, until one of them succeeds*match (choice ["cat", "dog", "egg"]) "egg"["egg"]*match (choice ["cat", "dog", "egg"]) "cat"["cat"]*match (choice ["cat", "dog", "egg"]) "fan"[]TGApply the given pattern a fixed number of times, collecting the resultsmatch (count 3 anyChar) "123"["123"]match (count 4 anyChar) "123"[]UVApply the given pattern at least the given number of times, collecting the results match (lowerBounded 5 dot) "123"[] match (lowerBounded 2 dot) "123"["123"]VXApply the given pattern 0 or more times, up to a given bound, collecting the results match (upperBounded 5 dot) "123"["123"] match (upperBounded 2 dot) "123"[]2match ((,) <$> upperBounded 2 dot <*> chars) "123"[("12","3"),("1","23")]WpApply the given pattern a number of times restricted by given lower and upper bounds, collecting the results%match (bounded 2 5 "cat") "catcatcat"[["cat","cat","cat"]]match (bounded 2 5 "cat") "cat"[].match (bounded 2 5 "cat") "catcatcatcatcatcat"[]W) could be implemented naively as follows: >bounded m n p = do x <- choice (map pure [m..n]) count x pXFTransform a parser to a succeed with an empty value instead of failing See also: mmatch (option "1" <> "2") "12"["12"]match (option "1" <> "2") "2"["2"]Y(between open close p) matches 'p' in between 'open' and 'close'<match (between (char '(') (char ')') (star anyChar)) "(123)"["123"];match (between (char '(') (char ')') (star anyChar)) "(123"[]ZDiscard the pattern's resultmatch (skip anyChar) "1"[()]match (skip anyChar) ""[][KRestrict the pattern to consume no more than the given number of charactersmatch (within 2 decimal) "12"[12]match (within 2 decimal) "1"[1]match (within 2 decimal) "123"[]\ERequire the pattern to consume exactly the given number of charactersmatch (fixed 2 decimal) "12"[12]match (fixed 2 decimal) "1"[]]p ] sep% matches zero or more occurrences of p separated by sep(match (decimal `sepBy` char ',') "1,2,3" [[1,2,3]]#match (decimal `sepBy` char ',') ""[[]]^p ^ sep$ matches one or more occurrences of p separated by sep$match (decimal `sepBy1` ",") "1,2,3" [[1,2,3]]match (decimal `sepBy1` ",") ""[]_Like star dot or  star anyChar, except more efficient`Like plus dot or  plus anyChar, except more efficientb;Pattern forms a semiring, this is the closest approximation9-no./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abc4-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`4-./0123456789:;<=>?@ABCDEFGJKLMNOHIPQRSTUVWXYZ[\]^_`7-no./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcNone0Ii+A line of text (does not contain newlines).jThe j* exception is thrown when you construct a i3 using an overloaded string literal or by calling  explicitly and the supplied string contains newlines. This is a programming error to do so: if you aren't sure that the input string is newline-free, do not rely on the  i instance.HWhen debugging, it might be useful to look for implicit invocations of  for i: Q>>> sh (do { line <- "Hello\nWorld"; echo line }) *** Exception: NewlineForbiddenIn the above example, echo expects its argument to be a i, thus line :: i. Since we bind line in Shell, the string literal "Hello\nWorld" has type Shell i. The  (Shell i)+ instance delegates the construction of a i to the  i) instance, where the exception is thrown.To fix the problem, use m: R>>> sh (do { line <- select (textToLines "Hello\nWorld"); echo line }) Hello WorldlConvert a line to a text value.m&Split text into lines. The inverse of n.n%Merge lines into a single text value.oiTry to convert a text value into a line. Precondition (checked): the argument does not contain newlines.pdConvert a text value into a line. Precondition (unchecked): the argument does not contain newlines. ipjklmnopqrijklmnopilmnopjk ipjklmnopqrNoneITx-A helpful message explaining what a flag doesThis will appear in the --help output{-A brief description of what your program does2This description will appear in the header of the --help output~The name of a sub-command=This is lower-cased to create a sub-command. For example, a ~ of "Name" will parse name^ on the command line before parsing the remaining arguments using the command's subparser.6The short one-character abbreviation for a flag (i.e. -n)#The name of a command-line argumenteThis is used to infer the long name and metavariable for the command line flag. For example, an  of "name" will create a --name flag with a NAME metavariable-Parse the given options from the command lineThis parser returns q if the given flag is set and r if the flag is absent=Build a flag-based option parser for any type by providing a -parsing functionParse any type that implements s Parse an t as a flag-based option Parse an u as a flag-based optionParse a v as a flag-based optionParse a  value as a flag-based optionParse a i value as a flag-based optionParse a w value as a flag-based optionCBuild a positional argument parser for any type by providing a -parsing functionParse any type that implements s as a positional argument Parse an t as a positional argument Parse an u as a positional argumentParse a v as a positional argumentParse a  as a positional argumentParse a i as a positional argumentParse a w as a positional argument!Create a sub-command that parses ~; and then parses the rest of the command-line arguments"The sub-command will have its own { and help text$Create a named group of sub-commands"xyz{|}~x"xyz{|}~"~{|}xyzxyz{|}~x SafeyyyNoneDRA  stringConcatenate two  strings Convert a V string to a print function that takes zero or more typed arguments and returns a  stringPrint a 7 string to standard output (without a trailing newline)"printf ("Hello, "%s%"!\n") "world" Hello, world! Create your own format specifier any z able value format w True"True" an { value as a signed decimal format d 25"25"format d (-25)"-25" a | value as an unsigned decimal format u 25"25" a |" value as an unsigned octal number format o 25"31" a |E value as an unsigned hexadecimal number (without a leading "0x") format x 25"19" a v2 using decimal notation with 6 digits of precision format f 25.1 "25.100000" a v5 using scientific notation with 6 digits of precision format e 25.1 "2.510000e1" a v[ using decimal notation for small exponents and scientific notation for large exponents format g 25.1 "25.100000"format g 123456789 "1.234568e8"format g 0.00000000001"1.000000e-11" that inserts format s "ABC""ABC" that inserts a iformat l "ABC""ABC" a w into  a  into  Convert a z'able value to any type that implements  (such as ) repr (1,2)"(1,2)"}~}~None0IOTThe first line with the headerDEvery other line: 1st element is header, 2nd element is original rowAn abstract file size5Specify the units you want by using an accessor like 0The  instance for % interprets numeric literals as bytesThis type is the same as System.Directory. type except combining the  and  fields into a single ) field for consistency with the Unix chmodM. This simplification is still entirely consistent with the behavior of System.Directory5, which treats the two fields as interchangeable.Run a command using execvp, retrieving the exit codeThe command inherits stdout and stderr for the current process<Run a command line using the shell, retrieving the exit code#This command is more powerful than c, but highly vulnerable to code injection if you template the command line with untrusted inputThe command inherits stdout and stderr for the current processThis function is identical to  except this throws  for non-zero exit codesThis function is identical to  except this throws  for non-zero exit codesRun a command using execvpD, retrieving the exit code and stdout as a non-lazy blob of TextThe command inherits stderr for the current processfRun a command line using the shell, retrieving the exit code and stdout as a non-lazy blob of Text#This command is more powerful than c, but highly vulnerable to code injection if you template the command line with untrusted inputThe command inherits stderr for the current processRun a command using execvpM, retrieving the exit code, stdout, and stderr as a non-lazy blob of TextoRun a command line using the shell, retrieving the exit code, stdout, and stderr as a non-lazy blob of Text#This command is more powerful than c, but highly vulnerable to code injection if you template the command line with untrusted inputHalt an 7 thread, re-raising any exceptions it might have thrown generalizes  and / by allowing you to supply your own custom  CreateProcessM. This is for advanced users who feel comfortable using the lower-level process API generalizes  and / by allowing you to supply your own custom  CreateProcessM. This is for advanced users who feel comfortable using the lower-level process API generalizes  and / by allowing you to supply your own custom  CreateProcessM. This is for advanced users who feel comfortable using the lower-level process APIRun a command using execvp , streaming stdout as lines of The command inherits stderr for the current process.Run a command line using the shell, streaming stdout as lines of #This command is more powerful than c, but highly vulnerable to code injection if you template the command line with untrusted inputThe command inherits stderr for the current process generalizes  and / by allowing you to supply your own custom  CreateProcessM. This is for advanced users who feel comfortable using the lower-level process API Throws an 6 exception if the command returns a non-zero exit code generalizes  and / by allowing you to supply your own custom  CreateProcessM. This is for advanced users who feel comfortable using the lower-level process API Throws an 6 exception if the command returns a non-zero exit code)Run a command using the shell, streaming stdout and stderr as lines of . Lines from stdout are wrapped in  and lines from stderr are wrapped in . Throws an 6 exception if the command returns a non-zero exit code.Run a command line using the shell, streaming stdout and stderr as lines of . Lines from stdout are wrapped in  and lines from stderr are wrapped in .#This command is more powerful than c, but highly vulnerable to code injection if you template the command line with untrusted input Throws an 6 exception if the command returns a non-zero exit codePrint exactly one line to stdout To print more than one line see  *, which also supports formatted outputPrint exactly one line to stderrRead in a line from stdinReturns  if at end of input$Get command line arguments in a list%Set or modify an environment variableDelete an environment variableLook up an environment variable"Retrieve all environment variablesChange the current directory/Change the current directory. Once the current 4 is done, it returns back to the original directory.:set -XOverloadedStringscd "/"view (pushd "/tmp" >> pwd)FilePath "/tmp"pwd FilePath "/"Get the current directoryGet the home directoryCanonicalize a path@Stream all immediate children of the given directory, excluding "." and ".."CThis is used to remove the trailing slash from a path, because getPermissions/ will fail if a path ends with a trailing slash7Stream all recursive descendents of the given directory7Stream all recursive descendents of the given directory;This skips any directories that fail the supplied predicate !lstree = lsif (\_ -> return True)Move a file or directory?Works if the two paths are on the same filesystem. If not, mv[ will still work when dealing with a regular file, but the operation will not be atomicCreate a directory!Fails if the directory is present'Create a directory tree (equivalent to mkdir -p))Does not fail if the directory is present Copy a fileCopy a directory tree Remove a fileRemove a directory'Remove a directory tree (equivalent to rm -r)Use at your own riskCheck if a file existsCheck if a directory existsCheck if a path existsLTouch a file, updating the access and modification times to the current time*Creates an empty file if it does not existUnder the hood, System.Directory" does not distinguish between  and '. They both translate to the same  D permission. That means that we can always safely just set the  field and safely leave the  field as r/ because the two fields are combined with (5) to determine whether to set the executable bit.-Update a file or directory's user permissions chmod rwo "foo.txt" -- chmod u=rw foo.txt chmod executable "foo.txt" -- chmod u+x foo.txt chmod nonwritable "foo.txt" -- chmod u-w foo.txt"The meaning of each permission is: (+r[ for short): For files, determines whether you can read from that file (such as with g). For directories, determines whether or not you can list the directory contents (such as with 3). Note: if a directory is not readable then , will stream an empty list of contents (+wZ for short): For files, determines whether you can write to that file (such as with b). For directories, determines whether you can create a new file underneath that directory. (+x^ for short): For files, determines whether or not that file is executable (such as with ). For directories, determines whether or not you can read or execute files underneath that directory (such as with  or )*Get a file or directory's user permissions*Set a file or directory's user permissions5Copy a file or directory's permissions (analogous to chmod --reference) +r -r +w -w +x -x -r -w -x +r -w -x -r +w -x -r -w +x +r +w -x +r -w +x -r +w +x +r +w +x:Time how long a command takes in monotonic wall clock time/Returns the duration alongside the return valueGet the system's host name(Show the full path of an executable file9Show all matching executables in PATH, not just the firstSleep for the given durationKA numeric literal argument is interpreted as seconds. In other words,  (sleep 2.0) will sleep for two seconds.Exit with the given exit codeAn exit code of 0 indicates success&Throw an exception using the provided  message  Analogous to  in Bash6Runs the second command only if the first one returns   Analogous to  in Bash5Run the second command only if the first one returns  ;Create a temporary directory underneath the given directory)Deletes the temporary directory when done 6Create a temporary file underneath the given directory$Deletes the temporary file when doneNote that this provides the  of the file in order to avoid a potential race condition from the file being moved or deleted before you have a chance to open the file. The  W function provides a simpler API if you don't need to worry about that possibility. 6Create a temporary file underneath the given directory$Deletes the temporary file when doneFork a thread, acquiring an  value Wait for an  action to completeRead lines of  from standard inputRead lines of  from a fileRead lines of  from a Stream lines of  to standard outputStream lines of  to a fileStream lines of  to a Stream lines of  to append to a fileStream lines of  to standard error$Read in a stream's contents strictly Acquire a Managed read-only  from a w Acquire a Managed write-only  from a w Acquire a Managed append-only  from a wCombine the output of multiple  s, in order$Keep all lines that match the given -Replace all occurrences of a - with its  result performs substitution on a line-by-line basis, meaning that substitutions may not span multiple lines. Additionally, substitutions may occur multiple times within the same line, like the behavior of  s/.../.../g.Warning: Do not use a -V that matches the empty string, since it will match an infinite number of times.  tries to detect such - s and W with an error message if they occur, but this detection is necessarily incomplete.3Make a `Shell Text -> Shell Text` function work on wAs instead. | Ignores any paths which cannot be decoded as valid . Like , but operates in place on a w (analogous to sed -i)!@Search a directory recursively for all files matching the given -" A Stream of "y"s#Number each element of a  (starting at 0)$ Merge two s together, element-wiseIf one @ is longer than the other, the excess elements are truncated%A  that endlessly emits ()&Limit a  to a fixed number of values'Limit a % to values that satisfy the predicateUThis terminates the stream on the first value that does not satisfy the predicate(Cache a m's output so that repeated runs of the script will reuse the result of previous runs. You must supply a w, where the cached result will be stored.(The stored result is only reused if the  successfully ran to completion without any exceptions. Note: on some platforms Ctrl-C will flush standard input and signal end of file before killing the program, which may trick the program into "successfully" completing.)9Run a list of IO actions in parallel using fork and wait./view (parallel [(sleep 3) >> date, date, date])2016-12-01 17:22:10.83296 UTC2016-12-01 17:22:07.829876 UTC2016-12-01 17:22:07.829963 UTC*0Split a line into chunks delimited by the given -+Get the current time,%Get the time a file was last modified-%Get the size of a file or a directory. a & using a human readable representation format sz 42"42 B"format sz 2309 "2.309 KB"format sz 949203 "949.203 KB"format sz 1600000000 "1.600 GB"format sz 999999999999999999"999999.999 TB"/Extract a size in bytes0 1 kilobyte = 1000 bytes1 1 megabyte = 1000 kilobytes2 1 gigabyte = 1000 megabytes3 1 terabyte = 1000 gigabytes4 1 kibibyte = 1024 bytes5 1 mebibyte = 1024 kibibytes6 1 gibibyte = 1024 mebibytes7 1 tebibyte = 1024 gibibytes83Count the number of characters in the stream (like wc -c)yThis uses the convention that the elements of the stream are implicitly ended by newlines that are one character wide9.Count the number of words in the stream (like wc -w):.Count the number of lines in the stream (like wc -l)PThis uses the convention that each element of the stream represents one line;Get the status of a file<3Size of the file in bytes. Does not follow symlinks=Time of last access>Time of last modification?FTime of last status change (i.e. owner, group, link count, mode, etc.)@9Get the status of a file, but don't follow symbolic linksBReturns the result of a  that outputs a single line: Lmain = do Just directory <- single (inshell "pwd" empty) print directoryCommand ArgumentsLines of standard input Exit code Command lineLines of standard input Exit codeCommand ArgumentsLines of standard input Command lineLines of standard input Exit codeCommand ArgumentsLines of standard inputExit code and stdout Command lineLines of standard inputExit code and stdoutCommand ArgumentsLines of standard input(Exit code, stdout, stderr) Command lineLines of standard input(Exit code, stdout, stderr)CommandLines of standard input Exit codeCommandLines of standard inputExit code and stdoutCommandLines of standard inputExit code and stdoutCommand ArgumentsLines of standard inputLines of standard output Command lineLines of standard inputLines of standard outputCommandLines of standard inputLines of standard outputCommandLines of standard inputLines of standard outputCommand ArgumentsLines of standard input!Lines of either standard output () or standard error () Command lineLines of standard input!Lines of either standard output () or standard error ()Permissions update functionPathUpdated permissions   Parent directoryDirectory name template Parent directoryFile name template Parent directoryFile name template !"#$%&'()*+,-./0123456789:;<=>?@ABCDE      !"#$%&'()*+,-./0123456789:;<=>?@AB+,      !"#$%&'()B89:*-./01234567;@<=>?A      !"#$%&'()*+,-./0123456789:;<=>?@ABCDE 3 2NoneOTP(Read chunks of bytes from standard input9The chunks are not necessarily aligned to line boundariesQ Read chunks of bytes from a file9The chunks are not necessarily aligned to line boundariesRRead chunks of bytes from a 9The chunks are not necessarily aligned to line boundariesS)Stream chunks of bytes to standard output9The chunks are not necessarily aligned to line boundariesT Stream chunks of bytes to a file7The chunks do not need to be aligned to line boundariesUStream chunks of bytes to a 7The chunks do not need to be aligned to line boundariesV*Append chunks of bytes to append to a file7The chunks do not need to be aligned to line boundariesW(Stream chunks of bytes to standard error7The chunks do not need to be aligned to line boundariesX$Read in a stream's contents strictlyYRun a command using execvp, retrieving the exit codeThe command inherits stdout and stderr for the current processZ<Run a command line using the shell, retrieving the exit code#This command is more powerful than Yc, but highly vulnerable to code injection if you template the command line with untrusted inputThe command inherits stdout and stderr for the current process[This function is identical to Y except this throws  for non-zero exit codes\This function is identical to Z except this throws  for non-zero exit codes]Run a command using execvpD, retrieving the exit code and stdout as a non-lazy blob of TextThe command inherits stderr for the current process^fRun a command line using the shell, retrieving the exit code and stdout as a non-lazy blob of Text#This command is more powerful than Yc, but highly vulnerable to code injection if you template the command line with untrusted inputThe command inherits stderr for the current process_Run a command using execvpM, retrieving the exit code, stdout, and stderr as a non-lazy blob of Text`oRun a command line using the shell, retrieving the exit code, stdout, and stderr as a non-lazy blob of Text#This command is more powerful than Yc, but highly vulnerable to code injection if you template the command line with untrusted inputHalt an 7 thread, re-raising any exceptions it might have thrownaa generalizes Z and Y/ by allowing you to supply your own custom  CreateProcessM. This is for advanced users who feel comfortable using the lower-level process APIbb generalizes ^ and ]/ by allowing you to supply your own custom  CreateProcessM. This is for advanced users who feel comfortable using the lower-level process APIcc generalizes ` and _/ by allowing you to supply your own custom  CreateProcessM. This is for advanced users who feel comfortable using the lower-level process APIdRun a command using execvp , streaming stdout as chunks of The command inherits stderr for the current processe.Run a command line using the shell, streaming stdout as chunks of #This command is more powerful than dc, but highly vulnerable to code injection if you template the command line with untrusted inputThe command inherits stderr for the current processff generalizes d and e/ by allowing you to supply your own custom  CreateProcessM. This is for advanced users who feel comfortable using the lower-level process API Throws an 6 exception if the command returns a non-zero exit codegg generalizes h and i/ by allowing you to supply your own custom  CreateProcessM. This is for advanced users who feel comfortable using the lower-level process API Throws an 6 exception if the command returns a non-zero exit codeh)Run a command using the shell, streaming stdout and stderr as chunks of . Chunks from stdout are wrapped in  and chunks from stderr are wrapped in . Throws an 6 exception if the command returns a non-zero exit codei.Run a command line using the shell, streaming stdout and stderr as chunks of . Chunks from stdout are wrapped in  and chunks from stderr are wrapped in .#This command is more powerful than hc, but highly vulnerable to code injection if you template the command line with untrusted input Throws an 6 exception if the command returns a non-zero exit codePQRSTUVWXYCommand Arguments(Chunks of bytes written to process input Exit codeZ Command line(Chunks of bytes written to process input Exit code[Command Arguments(Chunks of bytes written to process input\ Command line(Chunks of bytes written to process input Exit code]Command Arguments(Chunks of bytes written to process inputExit code and stdout^ Command line(Chunks of bytes written to process inputExit code and stdout_Command Arguments(Chunks of bytes written to process input(Exit code, stdout, stderr)` Command line(Chunks of bytes written to process input(Exit code, stdout, stderr)aCommand(Chunks of bytes written to process input Exit codebCommand(Chunks of bytes written to process inputExit code and stdoutcCommand(Chunks of bytes written to process inputExit code and stdoutdCommand Arguments(Chunks of bytes written to process input(Chunks of bytes read from process outpute Command line(Chunks of bytes written to process input(Chunks of bytes read from process outputfCommand(Chunks of bytes written to process input(Chunks of bytes read from process outputgCommand(Chunks of bytes written to process input(Chunks of bytes read from process outputhCommand Arguments(Chunks of bytes written to process inputChunks of either output ( ) or error ()i Command line(Chunks of bytes written to process inputChunks of either output ( ) or error ()PQRSTUVWXYZ[\]^_`abcdefghiPQRSTUVWXYZ[\dehi]^_`afgbcPQRSTUVWXYZ[\]^_`abcdefghiNone^m  w !"-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`ijklmnopxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@AB  None ! ! " "#$%&'()*+)*,-./-.012312412512612712812912:;;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~       !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcde&'()*+,-.fghijfgklmLnfgofgpqrfgstuvfgwxyz{ |}~fgff#$#$#$#$xxxxxxxxxxxxxxxxxxxx#turtle-1.4.0-9Z7rjhr95GfGk4Rtx3FaxITurtle Turtle.ShellTurtle.OptionsTurtle.PreludeTurtle.Pattern Turtle.Line Turtle.Format Turtle.BytesTurtle.Internalprintf System.PosixownerExecuteModeTurtle.Tutorialbase Data.String fromStringIsStringGHC.IO.Handle.TypesHandleControl.Monad.IO.ClassliftIOGHC.IO.Exception ExitFailure ExitSuccessExitCode Data.Function&#text-1.2.2.2-KC7dWoG09dA1F6jKj5GSqhData.Text.InternalText"foldl-1.3.0-8vCIUWtKrn83Yyyf5e8MgX Control.FoldlFoldFoldM$managed-1.0.5-83xU3i5xYzoBicHocI7GYoControl.Monad.Managedusing4optparse-applicative-0.14.0.0-DrveDg0THnfKmXSDuEftPeOptions.Applicative.TypesParser-system-fileio-0.3.16.3-EJMmBrEv28Z3dSDVZShJyy Filesystem writeTextFile readTextFile time-1.6.0.1Data.Time.Clock.UTCUTCTimeNominalDiffTime unix-2.7.2.1System.Posix.Files.CommonisSocketisSymbolicLink isDirectory isRegularFile isNamedPipeisCharacterDevice isBlockDevice FileStatusShell_foldIOfoldIOfoldshviewselect$fIsStringShell $fNumShell $fMonoidShell$fMonadManagedShell$fMonadIOShell$fMonadPlusShell$fAlternativeShell $fMonadShell$fApplicativeShell$fFunctorShellPatternmatchanyChareofdotsatisfycharnotChartextasciiCIoneOfnoneOfspacespacesspaces1tabnewlinecrlfupperloweralphaNumletterdigithexDigitoctDigitdecimalsignedinvertonceprefixsuffixhasbeginsendscontainsstarplusselflesschoicecount lowerBounded upperBoundedboundedoptionbetweenskipwithinfixedsepBysepBy1charschars1$fIsStringPattern $fNumPattern$fMonoidPattern$fFunctorPattern$fApplicativePattern$fMonadPattern$fAlternativePattern$fMonadPlusPatternLineNewlineForbidden lineToText textToLines linesToText textToLineunsafeTextToLine$fIsStringLine$fExceptionNewlineForbidden$fShowNewlineForbidden$fEqLine $fOrdLine $fShowLine $fMonoidLine HelpMessagegetHelpMessage DescriptiongetDescription CommandNamegetCommandName ShortNameArgName getArgNameoptionsswitchoptoptReadoptInt optInteger optDoubleoptTextoptLineoptPathargargReadargInt argInteger argDoubleargTextargLineargPath subcommandsubcommandGroup$fIsStringArgName$fIsStringCommandName$fIsStringDescription$fIsStringHelpMessageFormat%format makeFormatwduoxfegslfputcrepr$fIsStringFormat$fCategoryTYPEFormat WithHeaderHeaderRowSize Permissions _readable _writable _executable ShellFailedshellCommandLine shellExitCode ProcFailed procCommand procArguments procExitCodeprocshellprocsshells procStrict shellStrictprocStrictWithErrshellStrictWithErrsystem systemStrictsystemStrictWithErrinprocinshellstream streamWithErr inprocWithErrinshellWithErrechoerrreadline argumentsexportunsetneedenvcdpushdpwdhomerealpathlslstreelsifmvmkdirmktreecpcptreermrmdirrmtreetestfiletestdirtestpathtouchchmodgetmodsetmodcopymodreadable nonreadablewritable nonwritable executable nonexecutableooorooowoooxrworoxowxrwxtimehostnamewhichwhichAllsleepexitdie.&&..||. mktempdirmktemp mktempfileforkwaitstdininputinhandlestdoutoutput outhandleappendstderrstrictreadonly writeonly appendonlycatgrepsedonFilesinplacefindyesnlpasteendlesslimit limitWhilecacheparallelcutdatedatefileduszbytes kilobytes megabytes gigabytes terabytes kibibytes mebibytes gibibytes tebibytes countChars countWords countLinesstatfileSize accessTimemodificationTimestatusChangeTimelstatheadersingle $fShowSize$fExceptionShellFailed$fExceptionProcFailed$fShowProcFailed$fShowShellFailed$fEqPermissions$fReadPermissions$fOrdPermissions$fShowPermissions$fEqSize $fOrdSize $fNumSize$fShowWithHeaderghc-prim GHC.TypesIO System.IOprintCharControl.Applicativeoptional runPatternTrueFalseGHC.ReadReadInt integer-gmpGHC.Integer.TypeIntegerDouble/system-filepath-0.4.13.4-CNHF84uxo6FCOjueFgn6BeFilesystem.Path.InternalFilePathargParseToReadM ignoreSIGPIPEGHC.ShowShowGHC.RealIntegralWord>>-GHC.NumNumdirectory-1.3.0.0System.Directory searchablehalt$async-2.1.1.1-8yywY4inVGRLJSCg60gBXjControl.Concurrent.AsyncAsync Data.EitherRightLeftGHC.BaseNothingdeslashtoSystemDirectoryPermissions GHC.Classes||&&Pair_bytesZipStateEmptyHasAHasABDonewaitForProcessThrowsfromSystemDirectoryPermissionscharsPerNewlinebytestring-0.10.8.1Data.ByteString.Internal ByteString Control.Monadguardjoin Applicativepure<*>*><*MonoidmemptymappendmconcatMonadIOmfilterunless replicateM_forever<=<>=> Data.Foldablemsum Data.Monoid<> Data.Functorvoid<$>whenliftA2 Alternativeempty<|>somemany MonadPlusmzeromplus runManagedwithmanagedManagedFilesystem.Path.CurrentOSfromTexttoTextFilesystem.PathsplitExtension dropExtension<.> hasExtension extensionsplitDirectoriescollapse stripPrefix commonPrefixrelativeabsolutebasenamedirnamefilenameparent directoryroot