base-4.3.1.0: Basic libraries

Portability | portable
Stability | provisional
Maintainer | ffi@haskell.org

Foreign.Marshal

Description

Marshalling support

Synopsis

- module Foreign.Marshal.Alloc
- module Foreign.Marshal.Array
- module Foreign.Marshal.Error
- module Foreign.Marshal.Pool
- module Foreign.Marshal.Utils
- unsafeLocalState :: IO a -> a

# Documentation

The module Foreign.Marshal re-exports the other modules in the `Foreign.Marshal` hierarchy:

module Foreign.Marshal.Alloc

module Foreign.Marshal.Array

module Foreign.Marshal.Error

module Foreign.Marshal.Pool

module Foreign.Marshal.Utils

and provides one function:

unsafeLocalState :: IO a -> a

Sometimes an external entity is a pure function, except that it passes arguments and/or results via pointers. The function `unsafeLocalState` permits the packaging of such entities as pure functions.

The only IO operations allowed in the IO action passed to `unsafeLocalState` are (a) local allocation (`alloca`, `allocaBytes` and derived operations such as `withArray` and `withCString`), and (b) pointer operations (`Foreign.Storable` and `Foreign.Ptr`) on the pointers to local storage, and (c) foreign functions whose only observable effect is to read and/or write the locally allocated memory. Passing an IO operation that does not obey these rules results in undefined behaviour.

It is expected that this operation will be replaced in a future revision of Haskell.