!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ Safe-InferredHMA  (Shell a) is a protected stream of a's with side effects Use a    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, ing any unused values Convert a list to a % that emits each element of the list  Acquire a  resource within a  in an exception-safe way :Shell forms a semiring, this is the closest approximation    NoneB.A helpful message explaining what a flag does This will appear in the --help output .A brief description of what your program does 2This description will appear in the header of the --help output 6The short one-character abbreviation for a flag (i.e. -n) $The name of a command-line argument fThis 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 line This parser returns  if the given flag is set and  if the flag is absent =Build a flag-based option parser for any type by providing a -parsing function !Parse any type that implements  " Parse an  as a flag-based option # Parse an  as a flag-based option $Parse a  as a flag-based option %Parse a  value as a flag-based option &Parse a  value as a flag-based option 'DBuild a positional argument parser for any type by providing a -parsing function (Parse any type that implements  as a positional argument ) Parse an  as a positional argument * Parse an  as a positional argument +Parse a  as a positional argument ,Parse a  as a positional argument -Parse a  as a positional argument  !"#$%&'()*+,- !"#$%&'()*+,-%"#$&! ,)*+-(' !"#$%&'()*+,-None=BK1.,A fully backtracking pattern that parses an 'a' from some  /Match a . against a ) input, returning all possible solutions The . must match the entire  0Match any character match anyChar "1""1" match anyChar """" 1Matches the end of input  match eof "1"[] match eof ""[()] 2 Synonym for 0 37Match any character that satisfies the given predicate match (satisfy (== '1')) "1""1" match (satisfy (== '2')) "1""" 4Match a specific character match (char '1') "1""1" match (char '2') "1""" 5)Match any character except the given one match (notChar '2') "1""1" match (notChar '1') "1""" 6Match a specific string match (text "123") "123"["123"] You can also omit the 6 function if you enable the OverloadedStrings extension: match "123" "123"["123"] 72Match a specific string in a case-insensitive way  This only handles ASCII strings match (asciiCI "abc") "ABC"["ABC"] 8&Match any one of the given characters match (oneOf "1a") "1""1" match (oneOf "2a") "1""" 9/Match anything other than the given characters match (noneOf "2a") "1""1" match (noneOf "1a") "1""" :Match a whitespace character match space " "" " match space "1""" ;)Match zero or more whitespace characters match spaces " "[" "] match spaces ""[""] <(Match one or more whitespace characters match 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 letter match upper "A""A" match upper "a""" AMatch a lowercase letter match lower "a""a" match lower "A""" BMatch a letter or digit match alphaNum "1""1" match alphaNum "a""a" match alphaNum "A""A" match alphaNum ".""" CMatch a letter match letter "A""A" match letter "a""a" match letter "1""" DMatch a digit match digit "1""1" match digit "a""" EMatch a hexadecimal digit match hexDigit "1""1" match hexDigit "A""A" match hexDigit "a""a" match hexDigit "g""" FMatch an octal digit match octDigit "1""1" match octDigit "9""" G!Match an unsigned decimal number match decimal "123"[123] match decimal "-123"[] H9Transform a numeric parser to accept an optional leading '+' or '-' sign match (signed decimal) "+123"[123] match (signed decimal) "-123"[-123] match (signed decimal) "123"[123] I(I p) succeeds if p fails and fails if p succeeds match (invert "A") "A"[] match (invert "A") "B"[()] JMatch a  , but return  match (once (char '1')) "1"["1"] match (once (char '1')) ""[] K)Use this to match the prefix of a string match "A" "ABC"[] match (prefix "A") "ABC"["A"] L)Use this to match the suffix of a string match "C" "ABC"[] match (suffix "C") "ABC"["C"] M+Use this to match the interior of a string match "B" "ABC"[] match (has "B") "ABC"["B"] N3Parse 0 or more occurrences of the given character match (star anyChar) "123"["123"] match (star anyChar) ""[""]  See also: \ O3Parse 1 or more occurrences of the given character match (plus digit) "123"["123"] match (plus digit) ""[]  See also: ] P~Patterns that match multiple times are greedy by default, meaning that they try to match as many times as possible. The P@ combinator makes a pattern match as few times as possible hThis 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"] QDApply 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"[] RHApply the given pattern a fixed number of times, collecting the results match (count 3 anyChar) "123"["123"] match (count 4 anyChar) "123"[] SZApply 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")] TrApply 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"[] T* could be implemented naively as follows: Abounded m n p = do x <- choice (map pure [m..n]) count x p UGTransform a parser to a succeed with an empty value instead of failing  See also:  match (option "1" <> "2") "12"["12"] match (option "1" <> "2") "2"["2"] V(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"[] WDiscard the pattern's result match (skip anyChar) "1"[()] match (skip anyChar) ""[] XLRestrict the pattern to consume no more than the given number of characters match (within 2 decimal) "12"[12] match (within 2 decimal) "1"[1] match (within 2 decimal) "123"[] YFRequire the pattern to consume exactly the given number of characters match (fixed 2 decimal) "12"[12] match (fixed 2 decimal) "1"[] Zp Z 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 efficient <Pattern forms a semiring, this is the closest approximation 5./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]0./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]0./0123456789:;<=>?@ABCDEFGHKLMIJNOPQRSTUVWXYZ[\]3./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\] Safe-Inferred=K^A ^ string _Concatenate two ^ strings ` Convert a ^W string to a print function that takes zero or more typed arguments and returns a  string a!Create your own format specifier b^ any  able value  format w True"True" c^ an  value as a signed decimal  format d 25"25" format d (-25)"-25" d^ a  value as an unsigned decimal  format u 25"25" e^ a # value as an unsigned octal number  format o 25"31" f^ a G value as an unsigned hexadecimal number (without a leading "0x")  format x 25"19" g^ a 3 using decimal notation with 6 digits of precision  format f 25.1 "25.100000" h^ a 6 using scientific notation with 6 digits of precision  format e 25.1 "2.510000e1" i^ a ] 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" j^ that inserts  format s "ABC""ABC" k^ a  into  l Convert a able value to  Short-hand for  (format w)  repr (1,2)"(1,2)" ^_`abcdefghijkl^_`abcdefghijkl^_`abcdefghijkl^_`abcdefghijklNoneBbmAn abstract file size5Specify the units you want by using an accessor like The  instance for m% interprets numeric literals as bytesnRun a command using execvp, retrieving the exit codeThe command inherits stdout and stderr for the current processo<Run a command line using the shell, retrieving the exit code#This command is more powerful than nc, but highly vulnerable to code injection if you template the command line with untrusted inputThe command inherits stdout and stderr for the current processpRun a command using execvpD, retrieving the exit code and stdout as a non-lazy blob of TextThe command inherits stderr for the current processqfRun 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 nc, but highly vulnerable to code injection if you template the command line with untrusted inputThe command inherits stderr for the current processrRun a command using execvp , streaming stdout as lines of The command inherits stderr for the current processs.Run a command line using the shell, streaming stdout as lines of #This command is more powerful than rc, but highly vulnerable to code injection if you template the command line with untrusted inputThe command inherits stderr for the current processt Print to stdoutu Print to stderrvRead in a line from stdinReturns  if at end of inputw$Get command line arguments in a listx%Set or modify an environment variableyDelete an environment variablezLook up an environment variable{"Retrieve all environment variables|Change the current directory}Get the current directory~Get 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 directoryMove a file or directoryCreate 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 file 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 existsLTouch a file, updating the access and modification times to the current time*Creates an empty file if it does not exist-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-x foo.txt*Get a file or directory's user permissions*Set a file or directory's user permissions +r -r +w -w +x -x +s -s -r -w -x +r -w -x -r +w -x -r -w +x -r -w +s +r +w -x +r -w +x +r -w +s -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 nameSleep 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 done6Create a temporary file underneath the given directory$Deletes the temporary file when doneFork a thread, acquiring an  valueRead 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  read-only  from a  Acquire a  write-only  from a  Acquire a  append-only  from a Combine the output of multiple  s, in order$Keep all lines that match the given .Replace all occurrences of a . with its  resultWarning: Do not use a .S that matches the empty string, since it will match an infinite number of times@Search a directory recursively for all files matching the given . A Stream of "y"sLimit a  to a fixed number of valuesLimit a % to values that satisfy the predicateUThis terminates the stream on the first value that does not satisfy the predicateCache a m's output so that repeated runs of the script will reuse the result of previous runs. You must supply a , 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.Get the current time%Get the time a file was last modified%Get the size of a file or a directoryExtract a size in bytes 1 kilobyte = 1000 bytes 1 megabyte = 1000 kilobytes 1 gigabyte = 1000 megabytes 1 terabyte = 1000 gigabytes 1 kibibyte = 1024 bytes 1 mebibyte = 1024 kibibytes 1 gibibyte = 1024 mebibytes 1 tebibyte = 1024 gibibytes3Count 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 wide.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 linejmnCommand ArgumentsLines of standard input Exit codeo Command lineLines of standard input Exit codepCommand ArgumentsLines of standard inputExit code and stdoutq Command lineLines of standard inputExit code and stdoutCommandLines of standard input Exit codeCommandLines of standard inputExit code and stdoutrCommand ArgumentsLines of standard inputLines of standard outputs Command lineLines of standard inputLines of standard outputCommandLines of standard inputLines of standard outputtuvwxyz{|}~Permissions update functionPathUpdated permissionsParent directoryDirectory name templateParent directoryFile name templatedmnopqrstuvwxyz{|}~dnopqtuvwxyz{|}~rsmhmnopqrstuvwxyz{|}~None is a reverse application operator. This provides notational convenience. Its precedence is one higher than that of the forward application operator , which allows  to be nested in .       !"# $ %&'()*+,-./0123456789: !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ None;      !"#$%&'%&())*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~124   E  u !"#$%&'&( ) * +&, - . / 0 1 2 3 45678797:7;7<&=&>&?&@&A&B&C&D&E&F&G HIJKLKMNONPNQNRNSNTNUNVNWNXNYNZN[N\N]N^N_N`a turtle-1.2.0TurtleTurtle.Prelude Turtle.ShellTurtle.OptionsTurtle.Pattern Turtle.FormatTurtle.Tutorialbase Data.String fromStringIsStringGHC.IO.Handle.TypesHandle async-2.0.2Control.Concurrent.AsyncwaitGHC.IO.Exception ExitSuccess ExitFailureExitCodedirectory-1.2.1.0System.Directory Permissions text-1.2.1.1Data.Text.InternalText foldl-1.1.0 Control.FoldlFoldFoldMtransformers-0.4.3.0Control.Monad.IO.ClassliftIOoptparse-applicative-0.11.0.2Options.Applicative.TypesParser time-1.4.2Data.Time.Clock.UTCUTCTimeNominalDiffTimeShell_foldIOfoldIOfoldshviewselectusing HelpMessage Description ShortNameArgNameoptionsswitchoptoptReadoptInt optInteger optDoubleoptTextoptPathargargReadargInt argInteger argDoubleargTextargPathPatternmatchanyChareofdotsatisfycharnotChartextasciiCIoneOfnoneOfspacespacesspaces1tabnewlinecrlfupperloweralphaNumletterdigithexDigitoctDigitdecimalsignedinvertonceprefixsuffixhasstarplusselflesschoicecount upperBoundedboundedoptionbetweenskipwithinfixedsepBysepBy1charschars1Format%format makeFormatwduoxfegsfpreprSizeprocshell procStrict shellStrictinprocinshellechoerrreadline argumentsexportunsetneedenvcdpwdhomerealpathlslstreemvmkdirmktreecprmrmdirrmtreetestfiletestdirtouchchmodgetmodsetmodreadable nonreadablewritable nonwritable executable nonexecutable searchable nonsearchableooorooowoooxoosrworoxrosowxrwxrwstimehostnamesleepexitdie.&&..||. mktempdirmktempforkstdininputinhandlestdoutoutput outhandleappendstderrstrictreadonly writeonly appendonlycatgrepsedfindyeslimit limitWhilecachedatedatefiledubytes kilobytes megabytes gigabytes terabytes kibibytes mebibytes gibibytes tebibytes countChars countWords countLines&ghc-prim GHC.TypesIO System.IOprint managed-1.0.0Control.Monad.ManagedManaged $fNumShell$fIsStringShell $fMonoidShell$fMonadIOShell$fMonadPlusShell$fAlternativeShell $fMonadShell$fApplicativeShell$fFunctorShellTrueFalseGHC.ReadReadInt integer-gmpGHC.Integer.TypeIntegerDoublesystem-filepath-0.4.13.4Filesystem.Path.InternalFilePathgetHelpMessagegetDescription getArgNameargParseToReadMCharControl.Applicativeoptional $fNumPattern runPattern$fIsStringPattern$fMonoidPatternGHC.ShowShowWord>>-$fIsStringFormat$fCategory*FormatGHC.NumNum Data.MaybeNothingdeslash GHC.Classes&&||Async_bytessystem systemStrictstreamcharsPerNewline $fShowSizeGHC.Base$ Control.Monadguardjoin<*>pure Alternative MonadPlus ApplicativeliftA2<**>manysome<|>empty Data.Functor<$> Data.Monoid<>mconcatmappendmemptyMonoidmfilterunlesswhen replicateM_voidforever<=<>=>msummplusmzeroMonadIO runManagedmanagedFilesystem.Path.CurrentOSfromTexttoTextFilesystem.PathsplitExtension dropExtension<.> hasExtension extensionsplitDirectoriescollapse stripPrefix commonPrefixrelativeabsolutebasenamedirnamefilenameparent directoryroot