HsShellScript has facilities for managing command line arguments, which are easier to use than the GHC library GetOpt. Command line arguments are specified as lists of properties. HsShellScript builds on top of GHC's GetOpt, but hides it completely. Command line arguments handling has been added because GetOpt was found to be too cumbersome.
Calling programs and recognizing errors (via exitcode or exception) is made more easy. There are front end functions for common programs, such as /bin/mv or /bin/chmod.
Dealing with paths is not as trivial as it sounds. Take, for example ../foo.bar//./../baz/ (and split off the extension of the file name...). HsShellScript solves this thoroughly and provides functions for such tasks as splitting a path in directory and file name parts, splitting a path into path components, or syntactically normalising paths.
HsShellScript defines operators like ->- and ->>- which work like redirection operators in shells.
Reading the output of an external program, or piping the output of one program into the input of another, is almost as easy as in shells. HsShellScript provides corresponding operators.
Error handling is one thing which is done more thoroughly in HsShellScript than in shells. Failed programs won't be silently ignored. Exceptions are used for error handling. Non zero exit codes are thrown as exceptions.
Taking care of shell metacharacters usually isn't done right. HsShellScript provides functions for doing it safely.
The standard C library has mkstemp, mktemp, tempnam, tmpfile and tmpnam, which are all broken, non-portable or unsuitable in some way.