Portability | portable |
---|---|
Stability | provisional |
Maintainer | ffi@haskell.org |
Marshalling support
- 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 -> aSource
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.