Ӫ      !"#$%&'()*+,-./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    None=BK0,A fully backtracking pattern that parses an 'a' from some  Match a  against a ) input, returning all possible solutions The  must match the entire  Match any character match anyChar "1""1" match anyChar """" Matches the end of input  match eof "1"[] match eof ""[()]  Synonym for  7Match any character that satisfies the given predicate match (satisfy (== '1')) "1""1" match (satisfy (== '2')) "1""" Match a specific character match (char '1') "1""1" match (char '2') "1""" )Match any character except the given one match (notChar '2') "1""1" match (notChar '1') "1""" !Match a specific string match (text "123") "123"["123"] You can also omit the ! function if you enable the OverloadedStrings extension: match "123" "123"["123"] "2Match 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 " """ *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""" ,Match a lowercase letter match lower "a""a" match lower "A""" -Match a letter or digit match alphaNum "1""1" match alphaNum "a""a" match alphaNum "A""A" match alphaNum ".""" .Match a letter match letter "A""A" match letter "a""a" match letter "1""" /Match a digit match digit "1""1" match digit "a""" 0Match a hexadecimal digit match hexDigit "1""1" match hexDigit "A""A" match hexDigit "a""a" match hexDigit "g""" 1Match an octal digit match octDigit "1""1" match octDigit "9""" 2!Match an unsigned decimal number match decimal "123"[123] match decimal "-123"[] 39Transform 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] 4Match a  , but return  match (once (char '1')) "1"["1"] match (once (char '1')) ""[] 5)Use this to match the prefix of a string match "A" "ABC"[] match (prefix "A") "ABC"["A"] 6)Use this to match the suffix of a string match "C" "ABC"[] match (suffix "C") "ABC"["C"] 7+Use this to match the interior of a string match "B" "ABC"[] match (has "B") "ABC"["B"] 83Parse 0 or more occurrences of the given character match (star anyChar) "123"["123"] match (star anyChar) ""[""]  See also: F 93Parse 1 or more occurrences of the given character match (plus digit) "123"["123"] match (plus digit) ""[]  See also: G :~Patterns that match multiple times are greedy by default, meaning that they try to match as many times as possible. The :@ 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"] ;DApply 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"[] <HApply the given pattern a fixed number of times, collecting the results match (count 3 anyChar) "123"["123"] match (count 4 anyChar) "123"[] =ZApply 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")] >rApply 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: Abounded 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"[] ADiscard the pattern's result match (skip anyChar) "1"[()] match (skip anyChar) ""[] BLRestrict 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"[] CFRequire the pattern to consume exactly the given number of characters match (fixed 2 decimal) "12"[12] match (fixed 2 decimal) "1"[] Dp D 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 ',') ""[[]] Ep E sep$ matches one or more occurrences of p separated by sep $match (decimal `sepBy1` ",") "1,2,3" [[1,2,3]] match (decimal `sepBy1` ",") ""[] FLike star dot or  star anyChar, except more efficient GLike plus dot or  plus anyChar, except more efficient <Pattern forms a semiring, this is the closest approximation 4 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFG/ !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFG/ !"#$%&'()*+,-./0123567489:;<=>?@ABCDEFG2 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGNoneRHRun a command using execvp, retrieving the exit codeThe command inherits stdout and stderr for the current processI<Run a command line using the shell, retrieving the exit code#This command is more powerful than Hc, but highly vulnerable to code injection if you template the command line with untrusted inputThe command inherits stdout and stderr for the current processJRun a command using execvpD, retrieving the exit code and stdout as a non-lazy blob of TextThe command inherits stderr for the current processKfRun 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 Hc, but highly vulnerable to code injection if you template the command line with untrusted inputThe command inherits stderr for the current processLRun a command using execvp , streaming stdout as lines of The command inherits stderr for the current processM.Run a command line using the shell, streaming stdout as lines of #This command is more powerful than Lc, but highly vulnerable to code injection if you template the command line with untrusted inputThe command inherits stderr for the current processN Print to stdoutO Print to stderrPRead in a line from stdinReturns  if at end of inputQ$Get command line arguments in a listR%Set or modify an environment variableSDelete an environment variableTLook up an environment variableU"Retrieve all environment variablesVChange the current directoryWGet the current directoryXGet the home directoryYCanonicalize a pathZ@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 slash[7Stream all recursive descendents of the given directory\Move a file or directory]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 fileaRemove a directoryb'Remove a directory tree (equivalent to rm -r)Use at your own riskcGet a file or directory's sizedCheck if a file existseCheck if a directory existsfLTouch a file, updating the access and modification times to the current time*Creates an empty file if it does not existg-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.txth*Get a file or directory's user permissionsi*Set a file or directory's user permissionsj +rk -rl +wm -wn +xo -xp +sq -sr -r -w -xs +r -w -xt -r +w -xu -r -w +xv -r -w +sw +r +w -xx +r -w +xy +r -w +sz -r +w +x{ +r +w +x}:Time how long a command takes in monotonic wall clock time/Returns the duration alongside the return value~Sleep 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 standard errorStream lines of  to a fileStream lines of  to append to a file$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 predicateGet the current time%Get the time a file was last modifiedVHCommand ArgumentsLines of standard input Exit codeI Command lineLines of standard input Exit codeJCommand ArgumentsLines of standard inputExit code and stdoutK Command lineLines of standard inputExit code and stdoutCommandLines of standard input Exit codeCommandLines of standard inputExit code and stdoutLCommand ArgumentsLines of standard inputLines of standard outputM Command lineLines of standard inputLines of standard outputCommandLines of standard inputLines of standard outputNOPQRSTUVWXYZ[\]^_`abcdefgPermissions update functionPathUpdated permissionshijklmnopqrstuvwxyz{|}~Parent directoryDirectory name templateParent directoryFile name templateTHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~THIJKNOPQRSTUVWXY\]^_`abcdef}~LMZ[ghijklmnopqrstuvwxyz{|VHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ Safe-Inferred=KA  string Concatenate two  strings  Convert a W string to a print function that takes zero or more typed arguments and returns a  string !Create your own format specifier  any  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 G value as an unsigned hexadecimal number (without a leading "0x")  format x 25"19"  a 3 using decimal notation with 6 digits of precision  format f 25.1 "25.100000"  a 6 using scientific notation with 6 digits of precision  format e 25.1 "2.510000e1"  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"  that inserts  format s "ABC""ABC"  a  into  'import Filesystem.Path.CurrentOS((</>))format fp ("usr" </> "lib") "usr/lib"  Convert a able value to  Short-hand for  (format w)  repr (1,2)"(1,2)" 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:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ None     !"#!"$%%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~-       !"#$%&'( turtle-1.1.1TurtleTurtle.Prelude Turtle.ShellTurtle.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.3.0.0Control.Monad.IO.ClassliftIO time-1.4.2Data.Time.Clock.UTCUTCTimeNominalDiffTimeShell_foldIOfoldIOfoldshviewselectusingPatternmatchanyChareofdotsatisfycharnotChartextasciiCIoneOfnoneOfspacespacesspaces1tabnewlinecrlfupperloweralphaNumletterdigithexDigitoctDigitdecimalsignedonceprefixsuffixhasstarplusselflesschoicecount upperBoundedboundedoptionbetweenskipwithinfixedsepBysepBy1charschars1procshell procStrict shellStrictinprocinshellechoerrreadline argumentsexportunsetneedenvcdpwdhomerealpathlslstreemvmkdirmktreecprmrmdirrmtreedutestfiletestdirtouchchmodgetmodsetmodreadable nonreadablewritable nonwritable executable nonexecutable searchable nonsearchableooorooowoooxoosrworoxrosowxrwxrwstimesleepexitdie.&&..||. mktempdirmktempforkstdininputinhandlestdoutstderroutputappendstrictreadonly writeonly appendonlycatgrepsedfindyeslimit limitWhiledatedatefileFormat%format makeFormatwduoxfegsfprepr&ghc-prim GHC.TypesIO System.IOprint managed-1.0.0Control.Monad.ManagedManaged $fNumShell$fIsStringShell $fMonoidShell$fMonadIOShell$fMonadPlusShell$fAlternativeShell $fMonadShell$fApplicativeShell$fFunctorShellCharControl.Applicativeoptional $fNumPattern runPattern$fIsStringPattern$fMonoidPattern Data.MaybeNothingdeslash GHC.Classes&&||Asyncsystem-filepath-0.4.13.4Filesystem.Path.InternalFilePathsystem systemStrictstreamGHC.ShowShowIntWordDouble>>-$fIsStringFormat$fCategory*FormatGHC.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