úÎ!™ š #Acts like the identity function on  , and  like   on other types. 9Execute a shell command, capturing output and exit code. Used in the implementation of . +Execute a shell command, capturing output. Used in the implementation of . +Execute a shell command, capturing output. This requires the  QuasiQuotes extension. The expression  [sh| ... |] has type   . 6Executing this IO action will invoke the quoted shell -command and produce its standard output as a  . [sh| sha1sum /proc/uptime |]:"ebe14a88cf9be69d2192dcd7bec395e3f00ca7a4 /proc/uptime\n"You can interpolate Haskell   variables using the syntax $x/. Special characters are escaped, so that the 8program invoked by the shell will see each interpolated variable as a single argument. #let x = "foo bar" in [sh| cat $x |]'cat: foo bar: No such file or directory*** Exception: ExitFailure 1You can also write ${x}$ to separate the variable name from adjacent characters. "let x = "b" in [sh| echo a${x}c |]"abc\n".Be careful: the automatic escaping means that  [sh| cat '$x' |] is  less safe than  [sh| cat $x |], though it will work " by accident" in common cases. To interpolate without" escaping special characters, use  the syntax $+x . $let x = "foo bar" in [sh| cat $+x |]#cat: foo: No such file or directory#cat: bar: No such file or directory*** Exception: ExitFailure 1You can pass a literal $ to the shell as \$, or a literal \ as \\. 5As demonstrated above, a non-zero exit code from the <subprocess will raise an exception in your Haskell program. Variables of type other than   are interpolated via  . 2let x = Just (2 + 2) in [sh| touch $x; ls -l J* |]4"-rw-r--r-- 1 keegan keegan 0 Oct 7 23:28 Just 4\n"The interpolated variable's type must be an instance of  and of . 9Execute a shell command, capturing output and exit code. The expression  [shc| ... |] has type  (,  )*. A non-zero exit code does not raise an $exception your the Haskell program.  Otherwise,  acts like .       shqq-0.1 System.ShQQ showNonStringreadShellWithCode readShellshshcTokVarManyVarOneLitbaseGHC.BaseStringGHC.Showshow parseToksmkExpshExpbaseQQghc-prim GHC.TypesIOShowData.Typeable.InternalTypeableGHC.IO.ExceptionExitCode