H7      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ Safe-InferredA  (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    None.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 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 argument JThis 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 (?Build 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 /!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  !"#$%&'()*+,-./ !"#$%&'()*+,-./ &#$%'"!-*+,.)(/ !"#$%&'()*+,-./None50,A fully backtracking pattern that parses an 'a' from some  1Match a 0 against a ) input, returning all possible solutions The 0 must match the entire  2Match any character match anyChar "1""1"match anyChar """"3Matches the end of input  match eof "1"[] match eof ""[()]4 Synonym for 2 57Match any character that satisfies the given predicate match (satisfy (== '1')) "1""1"match (satisfy (== '2')) "1"""6Match a specific character match (char '1') "1""1"match (char '2') "1"""7)Match any character except the given one match (notChar '2') "1""1"match (notChar '1') "1"""8Match a specific string match (text "123") "123"["123"]You can also omit the 8 function if you enable the OverloadedStrings  extension: match "123" "123"["123"]92Match a specific string in a case-insensitive way  This only handles ASCII strings match (asciiCI "abc") "ABC"["ABC"]:&Match any one of the given characters match (oneOf "1a") "1""1"match (oneOf "2a") "1""";/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 " """AMatches a carriage return ('r') followed by a newline ('n') match crlf "\r\n"["\r\n"]match crlf "\n\r"[]BMatch an uppercase letter match upper "A""A"match upper "a"""CMatch a lowercase letter match lower "a""a"match lower "A"""DMatch a letter or digit match alphaNum "1""1"match alphaNum "a""a"match alphaNum "A""A"match alphaNum "."""EMatch a letter match letter "A""A"match letter "a""a"match letter "1"""FMatch a digit match digit "1""1"match digit "a"""GMatch a hexadecimal digit match hexDigit "1""1"match hexDigit "A""A"match hexDigit "a""a"match hexDigit "g"""HMatch an octal digit match octDigit "1""1"match octDigit "9"""I!Match an unsigned decimal number match decimal "123"[123]match decimal "-123"[]J9Transform 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]K(K p) succeeds if p fails and fails if p succeeds match (invert "A") "A"[]match (invert "A") "B"[()]LMatch a  , but return  match (once (char '1')) "1"["1"]match (once (char '1')) ""[]M)Use this to match the prefix of a string match "A" "ABC"[]match (prefix "A") "ABC"["A"]N)Use this to match the suffix of a string match "C" "ABC"[]match (suffix "C") "ABC"["C"]O+Use this to match the interior of a string match "B" "ABC"[]match (has "B") "ABC"["B"]P<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"]Q:Match 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"]R9Match 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"]S3Parse 0 or more occurrences of the given character match (star anyChar) "123"["123"]match (star anyChar) ""[""] See also: b T3Parse 1 or more occurrences of the given character match (plus digit) "123"["123"]match (plus digit) ""[] See also: c ULPatterns that match multiple times are greedy by default, meaning that they 1 try to match as many times as possible. The U combinator makes a + pattern match as few times as possible MThis 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"]VDApply 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"[]WHApply the given pattern a fixed number of times, collecting the results match (count 3 anyChar) "123"["123"]match (count 4 anyChar) "123"[]XKApply the given pattern at least the given number of times, collecting the  results  match (lowerBounded 5 dot) "123"[] match (lowerBounded 2 dot) "123"["123"]Y>Apply 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")]Z>Apply the given pattern a number of times restricted by given 3 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"[]Z* could be implemented naively as follows:  bounded m n p = do ! x <- choice (map pure [m..n])  count x p [GTransform 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 result match (skip anyChar) "1"[()]match (skip anyChar) ""[]^LRestrict 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"[]_FRequire the pattern to consume exactly the given number of characters match (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 ',') ""[[]]ap a sep$ matches one or more occurrences of p separated by sep $match (decimal `sepBy1` ",") "1,2,3" [[1,2,3]]match (decimal `sepBy1` ",") ""[]bLike star dot or  star anyChar, except more efficient cLike plus dot or  plus anyChar, except more efficient <Pattern forms a semiring, this is the closest approximation 90123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abc40123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abc40123456789:;<=>?@ABCDEFGHIJMNOPQRKLSTUVWXYZ[\]^_`abc70123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abc Safe-InferreddA d string eConcatenate two d strings f Convert a d: string to a print function that takes zero or more typed  arguments and returns a  string g!Create your own format specifier hd any  able value  format w True"True"id an  value as a signed decimal  format d 25"25"format d (-25)"-25"jd a  value as an unsigned decimal  format u 25"25"kd a # value as an unsigned octal number  format o 25"31"ld a 4 value as an unsigned hexadecimal number (without a  leading "0x")  format x 25"19"md a 3 using decimal notation with 6 digits of precision  format f 25.1 "25.100000"nd a 6 using scientific notation with 6 digits of precision  format e 25.1 "2.510000e1"od a 0 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"pd that inserts  format s "ABC""ABC"qd a  into  r Convert a able value to  Short-hand for  (format w)  repr (1,2)"(1,2)"defghijklmnopqrdefghijklmnopqrdefghijklmnopqrdefghijklmnopqrNonehsAn abstract file size 5Specify the units you want by using an accessor like  The  instance for s& interprets numeric literals as bytes tRun a command using execvp, retrieving the exit code The command inherits stdout and stderr for the current process u=Run a command line using the shell, retrieving the exit code #This command is more powerful than t , but highly vulnerable to code D injection if you template the command line with untrusted input The command inherits stdout and stderr for the current process vRun a command using execvp+, retrieving the exit code and stdout as a  non-lazy blob of Text The command inherits stderr for the current process wMRun 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 t , but highly vulnerable to code D injection if you template the command line with untrusted input The command inherits stderr for the current process xRun a command using execvp , streaming stdout as lines of  The command inherits stderr for the current process y.Run a command line using the shell, streaming stdout as lines of  #This command is more powerful than x , but highly vulnerable to code D injection if you template the command line with untrusted input The command inherits stderr for the current process z Print to stdout { Print to stderr |Read in a line from stdin Returns  if at end of input }%Get command line arguments in a list ~ Look up an environment variable #Retrieve all environment variables Change the current directory Get the current directory Get the home directory Canonicalize a path @Stream all immediate children of the given directory, excluding "." and  ".." ?This is used to remove the trailing slash from a path, because  getPermissions0 will fail if a path ends with a trailing slash 8Stream all recursive descendents of the given directory 8Stream 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 3Works if the two paths are on the same filesystem.  If not, mv3 will still work when dealing with a regular file, ) but the operation will not be atomic Create 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 file Remove a directory 'Remove a directory tree (equivalent to rm -r) Use at your own risk Check if a file exists Check if a directory exists Check if a path exists MTouch 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 3 chmod rwo "foo.txt" -- chmod u=rw foo.txt 2 chmod executable "foo.txt" -- chmod u+x foo.txt 2 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 +r +w +s;Time how long a command takes in monotonic wall clock time 0Returns the duration alongside the return value Get the system' s host name Sleep for the given duration GA numeric literal argument is interpreted as seconds. In other words,   (sleep 2.0) will sleep for two seconds. Exit with the given exit code An exit code of 0 indicates success &Throw an exception using the provided  message  Analogous to  in Bash 6Runs the second command only if the first one returns   Analogous to  in Bash 5Run the second command only if the first one returns  <Create a temporary directory underneath the given directory *Deletes the temporary directory when done 7Create a temporary file underneath the given directory %Deletes the temporary file when done Note that this provides the ! of the file in order to avoid a M potential race condition from the file being moved or deleted before you ) have a chance to open the file. The  function provides a  simpler API if you don'(t need to worry about that possibility. 7Create a temporary file underneath the given directory %Deletes the temporary file when done Fork a thread, acquiring an   value Read lines of  from standard input Read lines of  from a file Read lines of  from a  Stream lines of  to standard output Stream lines of  to a file Stream lines of  to a  Stream lines of  to append to a file Stream 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 0 Replace all occurrences of a 0 with its  result = performs substitution on a line-by-line basis, meaning that P substitutions may not span multiple lines. Additionally, substitutions may D occur multiple times within the same line, like the behavior of  s....../g. Warning: Do not use a 0. that matches the empty string, since it will ( match an infinite number of times.  tries to detect such 0s  and < with an error message if they occur, but this detection is  necessarily incomplete. @Search a directory recursively for all files matching the given 0  A Stream of "y"s Number each element of a  (starting at 0)  Merge two s together, element-wise If one 3 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 predicate HThis terminates the stream on the first value that does not satisfy the  predicate Cache a '<s output so that repeated runs of the script will reuse the 0 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 L completion without any exceptions. Note: on some platforms Ctrl-C will L 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 0 Get the current time &Get the time a file was last modified &Get the size of a file or a directory 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) HThis uses the convention that the elements of the stream are implicitly 2 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) HThis uses the convention that each element of the stream represents one  line ts    tCommand  Arguments Lines of standard input  Exit code u Command line Lines of standard input  Exit code vCommand  Arguments Lines of standard input Exit code and stdout w Command line Lines of standard input Exit code and stdout Command Lines of standard input  Exit code Command Lines of standard input Exit code and stdout xCommand  Arguments Lines of standard input Lines of standard output y Command line Lines of standard input Lines of standard output Command Lines of standard input Lines of standard output z{|}~Permissions update function Path Updated permissions Parent directory Directory name template Parent directory File name template Parent directory File name template istuvwxyz{|}~ituvwz{|}~xysns    tuvwxyz{|}~None> is a reverse application operator. This provides notational E convenience. Its precedence is one higher than that of the forward  application operator , which allows  to be nested in .  !"#$%&'()*+,-./012345 6 789:;<=>?@ABCDEFGHIJKLM !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ NoneN      !"#$%&'%&())*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~     1235G{ !"#$%&'&()*+,-./01234567879:;<=>?@ABCDEFGHGIGJGKGL7M7N7O7P7Q7R7S7T7U7V7W7X YZ[\ ]^ ]_ `a `b `c `d `e `f `g `h `i `j `k `l `m `n `o `p `q `rs turtle-1.2.3TurtleTurtle.Prelude Turtle.ShellTurtle.OptionsTurtle.Pattern Turtle.FormatTurtle.Tutorialbase Data.String fromStringIsStringGHC.IO.Handle.TypesHandle async-2.0.1.5Control.Concurrent.AsyncwaitGHC.IO.Exception ExitSuccess ExitFailureExitCodedirectory-1.2.0.1System.Directory Permissions text-0.11.3.1Data.Text.InternalText foldl-1.1.2 Control.FoldlFoldFoldMtransformers-0.4.3.0Control.Monad.IO.ClassliftIOoptparse-applicative-0.12.0.0Options.Applicative.TypesParser time-1.4.0.1Data.Time.Clock.UTCUTCTimeNominalDiffTimeShell_foldIOfoldIOfoldshviewselectusing HelpMessage Description CommandName ShortNameArgNameoptionsswitchoptoptReadoptInt optInteger optDoubleoptTextoptPathargargReadargInt argInteger argDoubleargTextargPath subcommandPatternmatchanyChareofdotsatisfycharnotChartextasciiCIoneOfnoneOfspacespacesspaces1tabnewlinecrlfupperloweralphaNumletterdigithexDigitoctDigitdecimalsignedinvertonceprefixsuffixhasbeginsendscontainsstarplusselflesschoicecount lowerBounded upperBoundedboundedoptionbetweenskipwithinfixedsepBysepBy1charschars1Format%format makeFormatwduoxfegsfpreprSizeprocshell procStrict shellStrictinprocinshellechoerrreadline argumentsneedenvcdpwdhomerealpathlslstreelsifmvmkdirmktreecprmrmdirrmtreetestfiletestdirtestpathtouchchmodgetmodsetmodreadable nonreadablewritable nonwritable executable nonexecutable searchable nonsearchableooorooowoooxoosrworoxrosowxrwxrwstimehostnamesleepexitdie.&&..||. mktempdirmktemp mktempfileforkstdininputinhandlestdoutoutput outhandleappendstderrstrictreadonly writeonly appendonlycatgrepsedfindyesnlpasteendlesslimit limitWhilecachecutdatedatefiledubytes kilobytes megabytes gigabytes terabytes kibibytes mebibytes gibibytes tebibytes countChars countWords countLines&ghc-prim GHC.TypesIO System.IOprint managed-1.0.1Control.Monad.ManagedManaged $fNumShell$fIsStringShell $fMonoidShell$fMonadIOShell$fMonadPlusShell$fAlternativeShell $fMonadShell$fApplicativeShell$fFunctorShellTrueFalseGHC.ReadReadInt integer-gmpGHC.Integer.TypeIntegerDoublesystem-filepath-0.4.13.4Filesystem.Path.InternalFilePathgetHelpMessagegetDescriptiongetCommandName getArgNameargParseToReadMCharControl.Applicativeoptional $fNumPattern runPattern$fIsStringPattern$fMonoidPatternGHC.ShowShowWord>>-$fIsStringFormat$fCategoryFormatGHC.NumNum Data.MaybeNothingdeslash GHC.Classes&&||Async_bytesZipStateDoneHasABHasAEmptysystem systemStrictstreamcharsPerNewline $fShowSizeGHC.Base$ Control.Monadguard MonadPlus ApplicativeliftA2<**><*>puremanysome<|>empty Alternative Data.Functor<$> Data.Monoid<>mconcatmappendmemptyMonoidmfilterunlesswhen replicateM_joinvoidforever<=<>=>msummplusmzeroMonadIO runManagedwithmanagedFilesystem.Path.CurrentOSfromTexttoTextFilesystem.PathsplitExtension dropExtension<.> hasExtension extensionsplitDirectoriescollapse stripPrefix commonPrefixrelativeabsolutebasenamedirnamefilenameparent directoryroot