The SystemExts module contains functionality
that goes beyond what the Haskell 98 module System
provides. That is, functionality that provides access to the
underlying OS' facilities in an OS-independent manner.
Notice that SystemExts shares the goal of
System. That is, it aims to provide
functionality that's supported by all platforms.
So, if you're looking to do serious system programming for a particular
(family) of platforms, you really want to check out the libraries
provided for the platform in question as well. e.g., The
Posix library for
POSIX.1-conforming
platforms, the Win32 library for Win32 platforms.
SystemExts exports the following:
rawSystem :: String -> IO ExitCode
withArgs :: [String] -> IO a -> IO a
withProgName :: String -> IO a -> IO a
getEnvironment :: IO [(String, String)] |
Notes:
rawSystem provides the exact same
behaviour as System.system, except
that the system command isn't invoked via a shell / command
interpreter.
Not involving your platform's shell / command interpreter is quicker
if you don't need its functionality, and it avoids running into
limitations imposed by the shell / command interpreter. For instance,
Win32 command interpreters place a limit on the length of the
command they can execute (~4k), which sometimes gets in the way
of what you want to do.
The withArgs action lets you change the value
returned by System.getArgs while executing an
IO action.
When the action has finished executing (or if it raises an exception),
the argument vector of System.getArgs is restored.
The withProgName action lets you change the
program name string returned by System.getProgName
while executing an IO action.
As withArgs, when the action has finished
executing (or if it raises an exception), the program name string
System.getArgs is restored.
The getEnvironment action returns all the
environment values present in your process' environment block.