cP      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~SafeINA  (Shell a) is a protected stream of a's with side effectsUse 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 valuesRun a  to completion, ing any unused valuesConvert a list to a $ that emits each element of the list9Shell forms a semiring, this is the closest approximation  NoneC-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 outputThe 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 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+CBuild 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 argument0Parse a   as a positional argument1Parse a  as a positional argument2!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  !  "#$%&'()*+,-./01 2 !"#$%&'()*+,-./012! #)&'(*%$0-./1,+2"  !  "#$%&'()*+,-./01 2None>CL53,A fully backtracking pattern that parses an 'a' from some  4Match a 3 against a  ( input, returning all possible solutionsThe 3 must match the entire  5Match any charactermatch anyChar "1""1"match anyChar """"6Matches the end of input match eof "1"[] match eof ""[()]7 Synonym for 586Match any character that satisfies the given predicatematch (satisfy (== '1')) "1""1"match (satisfy (== '2')) "1"""9Match a specific charactermatch (char '1') "1""1"match (char '2') "1""":(Match any character except the given onematch (notChar '2') "1""1"match (notChar '1') "1""";Match a specific stringmatch (text "123") "123"["123"]You can also omit the ; function if you enable the OverloadedStrings extension:match "123" "123"["123"]<1Match a specific string in a case-insensitive wayThis only handles ASCII stringsmatch (asciiCI "abc") "ABC"["ABC"]=%Match any one of the given charactersmatch (oneOf "1a") "1""1"match (oneOf "2a") "1""">.Match anything other than the given charactersmatch (noneOf "2a") "1""1"match (noneOf "1a") "1"""?Match a whitespace charactermatch space " "" "match space "1"""@(Match zero or more whitespace charactersmatch spaces " "[" "]match spaces ""[""]A'Match one or more whitespace charactersmatch spaces1 " "[" "]match spaces1 ""[]BMatch the tab character ('t')match tab "\t""\t" match tab " """CMatch the newline character ('n')match newline "\n""\n"match newline " """DMatches a carriage return ('r') followed by a newline ('n')match crlf "\r\n"["\r\n"]match crlf "\n\r"[]EMatch an uppercase lettermatch upper "A""A"match upper "a"""FMatch a lowercase lettermatch lower "a""a"match lower "A"""GMatch a letter or digitmatch alphaNum "1""1"match alphaNum "a""a"match alphaNum "A""A"match alphaNum "."""HMatch a lettermatch letter "A""A"match letter "a""a"match letter "1"""I Match a digitmatch digit "1""1"match digit "a"""JMatch a hexadecimal digitmatch hexDigit "1""1"match hexDigit "A""A"match hexDigit "a""a"match hexDigit "g"""KMatch an octal digitmatch octDigit "1""1"match octDigit "9"""L Match an unsigned decimal numbermatch decimal "123"[123]match decimal "-123"[]M9Transform a numeric parser to accept an optional leading '+' or '-' signmatch (signed decimal) "+123"[123]match (signed decimal) "-123"[-123]match (signed decimal) "123"[123]N(N p) succeeds if p fails and fails if p succeedsmatch (invert "A") "A"[]match (invert "A") "B"[()]OMatch a  , but return  match (once (char '1')) "1"["1"]match (once (char '1')) ""[]P(Use this to match the prefix of a stringmatch "A" "ABC"[]match (prefix "A") "ABC"["A"]Q(Use this to match the suffix of a stringmatch "C" "ABC"[]match (suffix "C") "ABC"["C"]R*Use this to match the interior of a stringmatch "B" "ABC"[]match (has "B") "ABC"["B"]S;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"]T9Match 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"]U8Match 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"]V2Parse 0 or more occurrences of the given charactermatch (star anyChar) "123"["123"]match (star anyChar) ""[""] See also: eW2Parse 1 or more occurrences of the given charactermatch (plus digit) "123"["123"]match (plus digit) ""[] See also: fX}Patterns that match multiple times are greedy by default, meaning that they try to match as many times as possible. The X> 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"]YCApply 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"[]ZGApply the given pattern a fixed number of times, collecting the resultsmatch (count 3 anyChar) "123"["123"]match (count 4 anyChar) "123"[][VApply the given pattern at least the given number of times, collecting the results match (lowerBounded 5 dot) "123"[] match (lowerBounded 2 dot) "123"["123"]\XApply 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")]]pApply 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"[]]) could be implemented naively as follows: >bounded m n p = do x <- choice (map pure [m..n]) count x p^FTransform 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"]_(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"[]`Discard the pattern's resultmatch (skip anyChar) "1"[()]match (skip anyChar) ""[]aKRestrict 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"[]bERequire the pattern to consume exactly the given number of charactersmatch (fixed 2 decimal) "12"[12]match (fixed 2 decimal) "1"[]cp c 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 ',') ""[[]]dp d sep$ matches one or more occurrences of p separated by sep$match (decimal `sepBy1` ",") "1,2,3" [[1,2,3]]match (decimal `sepBy1` ",") ""[]eLike star dot or  star anyChar, except more efficientfLike plus dot or  plus anyChar, except more efficient;Pattern forms a semiring, this is the closest approximation93456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdef43456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdef43456789:;<=>?@ABCDEFGHIJKLMPQRSTUNOVWXYZ[\]^_`abcdef73456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefSafe>LgA g stringhConcatenate two g stringsi Convert a gV string to a print function that takes zero or more typed arguments and returns a   stringjPrint a g7 string to standard output (without a trailing newline)"printf ("Hello, "%s%"!\n") "world" Hello, world!k Create your own format specifierlg any  able value format w True"True"mg an  value as a signed decimal format d 25"25"format d (-25)"-25"ng a  value as an unsigned decimal format u 25"25"og a " value as an unsigned octal number format o 25"31"pg a E value as an unsigned hexadecimal number (without a leading "0x") format x 25"19"qg a 2 using decimal notation with 6 digits of precision format f 25.1 "25.100000"rg a 5 using scientific notation with 6 digits of precision format e 25.1 "2.510000e1"sg 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"tg that inserts  format s "ABC""ABC"ug a  into  vg a  into  w Convert a able value to  Short-hand for  (format w) repr (1,2)"(1,2)"ghijklmnopqrstuvwghijklmnopqrstuvwghijklmnopqrstuvwghijklmnopqrstuvwNone+CINrxAn abstract file size5Specify the units you want by using an accessor like The  instance for x% interprets numeric literals as bytesRun 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 y 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 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 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)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  . This does notC throw an 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 does notC throw an exception if the command returns a non-zero exit code#This command is more powerful than c, but highly vulnerable to code injection if you template the command line with untrusted input Print to stdout Print 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 directoryGet 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 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 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 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 permissions5Copy a file or directory's permissions (analogous to chmod --reference) +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 +r +w +s: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 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 # 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 Managed read-only  from a  Acquire a Managed write-only  from a  Acquire a Managed append-only  from a Combine the output of multiple  s, in order$Keep all lines that match the given 3Replace all occurrences of a 3 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 3V that matches the empty string, since it will match an infinite number of times.  tries to detect such 3 s and W with an error message if they occur, but this detection is necessarily incomplete.Like , but operates in place on a  (analogous to sed -i)@Search a directory recursively for all files matching the given 3 A Stream of "y"sNumber each element of a  (starting at 0) Merge two s together, element-wiseIf one @ is longer than the other, the excess elements are truncatedA  that endlessly emits ()Limit 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.0Split a line into chunks delimited by the given 3Get the current time%Get the time a file was last modified%Get the size of a file or a directoryg a x& using a human readable representation format sz 42"42 B"format sz 2309 "2.309 KB"format sz 949203 "949.203 MB"format sz 1600000000 "1.600 GB"format sz 999999999999999999"999999.999 TB"Extract 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 linex$%&'()*yz{|}~Command 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 stdoutCommandLines of standard input Exit code+CommandLines of standard inputExit code and stdoutCommand ArgumentsLines of standard inputLines of standard output Command lineLines of standard inputLines of standard output,CommandLines of standard inputLines of standard output-CommandLines 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 permissionsParent directoryDirectory name templateParent directoryFile name templateParent directoryFile name template./01~xyz{|}~~x}~yz{||x$%&'()*yz{|}~+,- ./01None,23456789:;<=>?@ABCDEFGHIJKLMNOP QRSTUVWXYZ[\]^_`abcdefghi !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ Nonej       !"#$%&'()*+,*+-./0./1223456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~            !"  #$%&9':(;)=*+  ,-./O0123456  789:;<=>=?@AB CD CEFGHIJKLMNOPQRSTU@V@W@X@YTZT[T\T]T^T_`abcdedf@g@h@i@j@k@l@m@n@o@p@q@r@s@t@u@v!"w$%x$%y$%z$%{$|}$|~$$$$$$$$$$$$$$$$$$turtl_5zBP7gmY2Ma2omnr1ClP7YTurtleTurtle.Prelude Turtle.ShellTurtle.OptionsTurtle.Pattern Turtle.FormatTurtle.Tutorialbase Data.String fromStringIsStringGHC.IO.Handle.TypesHandleasync_KuqnF1GrhHK5nNp6Zzm3jyControl.Concurrent.AsyncwaitGHC.IO.Exception ExitFailure ExitSuccessExitCode Data.Function&direc_0hFG6ZxK1nk4zsyOqbNHfmSystem.Directory Permissionstext_HmqVQnZSpjaC156ABqPhneData.Text.InternalTextfoldl_8SQyo050NcN8wZ5g0EyMsp Control.FoldlFoldFoldMtrans_GZTjP9K5WFq01xC9BAGQpFControl.Monad.IO.ClassliftIOmanag_6MuRKdkWXS06s3GtUdM110Control.Monad.Managedusingoptpa_1uNjPQofqcX7YiQTmd8cknOptions.Applicative.TypesParsersyste_4TDp3THj8U86nw3l0Qe8pl Filesystem writeTextFile readTextFiletime_FTheb6LSxyX1UABIbBXRfnData.Time.Clock.UTCUTCTimeNominalDiffTimeShell_foldIOfoldIOfoldshviewselect HelpMessage Description CommandName ShortNameArgNameoptionsswitchoptoptReadoptInt optInteger optDoubleoptTextoptPathargargReadargInt argInteger argDoubleargTextargPath subcommandPatternmatchanyChareofdotsatisfycharnotChartextasciiCIoneOfnoneOfspacespacesspaces1tabnewlinecrlfupperloweralphaNumletterdigithexDigitoctDigitdecimalsignedinvertonceprefixsuffixhasbeginsendscontainsstarplusselflesschoicecount lowerBounded upperBoundedboundedoptionbetweenskipwithinfixedsepBysepBy1charschars1Format%formatprintf makeFormatwduoxfegsfputcreprSize ShellFailedshellCommandLine shellExitCode ProcFailed procCommand procArguments procExitCodeprocshellprocsshells procStrict shellStrictsysteminprocinshell inprocWithErrinshellWithErrechoerrreadline argumentsexportunsetneedenvcdpwdhomerealpathlslstreelsifmvmkdirmktreecprmrmdirrmtreetestfiletestdirtestpathtouchchmodgetmodsetmodcopymodreadable nonreadablewritable nonwritable executable nonexecutable searchable nonsearchableooorooowoooxoosrworoxrosowxrwxrwstimehostnamesleepexitdie.&&..||. mktempdirmktemp mktempfileforkstdininputinhandlestdoutoutput outhandleappendstderrstrictreadonly writeonly appendonlycatgrepsedinplacefindyesnlpasteendlesslimit limitWhilecachecutdatedatefileduszbytes kilobytes megabytes gigabytes terabytes kibibytes mebibytes gibibytes tebibytes countChars countWords countLinesghc-prim GHC.TypesIO System.IOprint $fNumShell$fIsStringShell $fMonoidShell$fMonadManagedShell$fMonadIOShell$fMonadPlusShell$fAlternativeShell $fMonadShell$fApplicativeShell$fFunctorShellTrueFalseGHC.ReadReadInt integer-gmpGHC.Integer.TypeIntegerDoublesyste_0e3pMPmZzix21iFp2U03LcFilesystem.Path.InternalFilePathgetHelpMessagegetDescriptiongetCommandName getArgNameargParseToReadMCharControl.Applicativeoptional $fNumPattern runPattern$fIsStringPattern$fMonoidPatternGHC.ShowShowGHC.RealIntegralWord>>-$fIsStringFormat$fCategory*FormatGHC.NumNum Data.EitherRightLeftGHC.BaseNothingdeslash GHC.Classes&&||Async_bytesZipStateEmptyHasAHasABDone systemStrictstream streamWithErrcharsPerNewline $fShowSize$fExceptionShellFailed$fExceptionProcFailed Control.Monadguardjoin<*>pure Applicativemfilterunless replicateM_forever<=<>=> Data.Foldablemsum Data.Monoid<> Data.Functorvoid<$>whenliftA2mconcatmappendmemptyMonoid<**>manysome<|>empty Alternativemplusmzero MonadPlusMonadIO runManagedwithmanagedManagedFilesystem.Path.CurrentOSfromTexttoTextFilesystem.PathsplitExtension dropExtension<.> hasExtension extensionsplitDirectoriescollapse stripPrefix commonPrefixrelativeabsolutebasenamedirnamefilenameparent directoryroot