4.32. `SystemExts`
Prev | Chapter 4. The `lang` package: language support | Next

## 4.32. `SystemExts`

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.

Prev | Up | Next
4.31. `StorableArray` | Home | 4.33. `Weak`