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.