úÎnJjYH      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFG Safe-Infered;mappend a Text && FilePath. Warning: uses toTextUnsafe mappend a FilePath &" Text. Warning: uses toTextUnsafe )silently uses the Right or Left value of  Filesystem.Path.CurrentOS.toText )A helper to catch any exception (same as  ... H (e :: SomeException) -> ...). &Catch an exception in the ShIO monad. &Catch an exception in the ShIO monad. EChange current working directory of ShIO. This does *not* change the I working directory of the process we are running it. Instead, ShIO keeps J track of its own workking directory and builds absolute paths internally C instead of passing down relative paths. This may have performance D repercussions if you are doing hundreds of thousands of filesystem N operations. You will want to handle these issues differently in those cases. cdY, execute a ShIO action in the new directory and then pop back to the original directory )makes an absolute path. Same as canonic. * TODO: use normalise from system-filepath makes an absolute path. path will also normalize  Currently a  renameFile) wrapper. TODO: Support cross-filesystem F move. TODO: Support directory paths in the second parameter, like in cp. Get back [Text] instead of [FilePath] ,List directory contents. Does *not* include "." and "..", but it does  include (other) hidden files. 3List directory recursively (like the POSIX utility find). -Obtain the current (ShIO) working directory. GEcho text to standard (error, when using _err variants) output. The _n ( variants do not print a final newline. GEcho text to standard (error, when using _err variants) output. The _n ( variants do not print a final newline. GEcho text to standard (error, when using _err variants) output. The _n ( variants do not print a final newline. GEcho text to standard (error, when using _err variants) output. The _n ( variants do not print a final newline. fail that takes a Text a print lifted into ShIO !8Create a new directory (fails if the directory exists). "ECreate a new directory, including parents (succeeds if the directory  already exists). #$Get a full path to an executable on PATH, if exists. FIXME does not  respect setenv'd environment and uses PATH inherited from the process  environment. $IObtain a (reasonably) canonic file path to a filesystem object. Based on  canonicalizePath in FileSystem. %%A monadic-conditional version of the when guard. &4Does a path point to an existing filesystem object? ''Does a path point to an existing file? (,Does a path point to an existing directory? ) Does a path point to a symlink? *KA swiss army cannon for removing things. Actually this goes farther than a K normal rm -rf, as it will circumvent permission problems for the files we  own. Use carefully. +IRemove a file. Does not fail if the file already is not there. Does fail  if the file is not a file. ,CSet an environment variable. The environment is maintained in ShIO D internally, and is passed to any external commands to be executed. -,add the filepath onto the PATH env variable .CFetch the current value of an environment variable. Both empty and 7 non-existent variables give empty string as a result. /CFetch the current value of an environment variable. Both empty and ; non-existent variables give the default value as a result 0HCreate a sub-ShIO in which external command outputs are not echoed. See sub. 1DCreate a sub-ShIO in which external command outputs are echoed. See sub. 2DCreate a sub-ShIO in which external command outputs are echoed. See sub. 3EEnter a sub-ShIO that inherits the environment and working directory B The original state will be restored when the sub-ShIO completes. $Exceptions are propagated normally. 4IEnter a ShIO from (Monad)IO. The environment and working directories are K inherited from the current process-wide values. Any subsequent changes in G processwide working directory or environment are not reflected in the  running ShIO. 5An infix shorthand for run. Write "command" # [ "argument" ... ]. 6GExecute an external command. Takes the command name (no shell allowed, 0 just a name of something that can be found via PATH; FIXME: setenv'd  PATHC is not taken into account, only the one inherited from the actual . outside environment). Nothing is provided on stdin of the process, and  stdout and stderr are collected and stored. The stdout is returned as  a result of run?, and complete stderr output is available after the fact using   lastStderr 4All of the stdout output will be loaded into memory : You can avoid this but still consume the result by using run', + or if you need to process the output than  runFoldLines 7&bind some arguments to run for re-use  Example: monit = command monit [-c, monitrc] 8bind some arguments to run_ for re-use  Example: monit_ = command_ monit [-c, monitrc] 9=bind some arguments to run for re-use, and expect 1 argument  Example: git = command1 git []; git pull [origin, master] :=bind some arguments to run for re-use, and expect 1 argument  Example: git_ = command1_ git []; git+ pull [origin, master] <)The output of last external command. See run. =1set the stdin to be used and cleared by the next run. >@set the output of the first command as the stdin of the second. ?JRun a ShIO computation and collect timing (TODO: and memory) information. @)Copy a file, or a directory recursively. AECopy a file. The second path could be a directory, in which case the 0 original file name is used, in that directory. BCLike filter, but more conveniently used with String lists, where a O substring match (TODO: also provide regexps, and maybe globs) is expressed as  grep "needle" [ "the", "stack", "of", "hay" ] . Boolean  predicates just like with filter are supported too:  grep ("fun"  isPrefixOf) [...]. C(A functor-lifting function composition. DBCreate a temporary directory and pass it as a parameter to a ShIO 1 computation. The directory is nuked afterwards. EWrite a Lazy Text to a file. FAppend a Lazy Text to a file. G"(Strictly) read file into a Text. $ All other functions use Lazy Text. h So Internally this reads a file as strict text and then converts it to lazy text, which is inefficient I  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGIJKLH  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGH43012,./- &'()#+*A@!"GEFD65;><=789:CB%$ ?  G  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGIJKLM        !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRS shelly-0.4Shellybase Data.Functor<$> Control.Monadwhentransformers-0.3.0.0Control.Monad.IO.ClassliftIOMemTime RunFailedShIO<>||<> toTextUnsafe toTextWarnfromTextcatchanycatch_sh catchany_shcdchdirpathabsPathmvls'lsfindpwdechoecho_necho_err echo_n_errexit errorExitterrorinspectmkdirmkdir_pwhichcanonicwhenMtest_etest_ftest_dtest_srm_rfrm_fsetenv appendPathgetenv getenv_defsilently verboselyprint_commandssubshelly#runcommandcommand_command1 command1_run_ lastStderrsetStdin-|-timecp_rcpgrep<$$> withTmpDir writefile appendfilereadfileControl.Exception.Basecatch$fPredicateLike[][]$fPredicateLike(->)a$fExceptionRunFailed$fShowRunFailed